概述
RecyclerView在安卓開發(fā)中非常實用,而且簡單易用,但是在實際開發(fā)中一直有一個問題困擾著我,就是定位問題,實際的項目中總是會遇到這樣的需求:檢索RecyclerView的某一項(各個項的高度不確定),然后定位這一項,將它顯示在頂部。用RecyclerView的默認移動的方法并不能實現(xiàn)這一點(個人感覺官方可能出于性能考慮才不實現(xiàn)這一點)。這篇博客就講解下我個人是如何實現(xiàn)這個需求的。
Demo演示
RecyclerView提供的用于控制移動的方法有2個
- scrollToPosition(int)
這個方法的作用是顯示指定項,就是把你想置頂?shù)捻楋@示出來,但是在屏幕的什么位置是不管的,只要那一項現(xiàn)在看得到了,那它就罷工了!
- scrollBy(int x,int y)
這個方法是自己去控制移動的距離,單位應該是像素。
使用scrollToPosition時,移動到前面的項時,它默認會將要顯示的項置頂,但是移動到后面的項時,位置就說不好了(看它心情!)一般會顯示在最后一個。用過的應該都有所了解。
使用scrollBy時就需要自己計算高度或者寬度。在動態(tài)的布局中且各項樣式高度可能都不一樣的情況下,自己計算高度是很有難度的。
上面說了這么多廢話,結論就是這2個方法都不能很好解決問題,但是,當他們2個結合使用的時候,我們的問題就變的好解決很多了!
思路是:先用scrollToPosition,將要置頂?shù)捻椣纫苿语@示出來,然后計算這一項離頂部的距離,用scrollBy完成最后的100米!
關鍵代碼
先傳入要置頂?shù)趲醉棧缓髤^(qū)分情況處理
private void moveToPosition(int n) { //先從RecyclerView的LayoutManager中獲取第一項和最后一項的Position int firstItem = mLinearLayoutManager.findFirstVisibleItemPosition(); int lastItem = mLinearLayoutManager.findLastVisibleItemPosition(); //然后區(qū)分情況 if (n <= firstItem ){ //當要置頂?shù)捻椩诋斍帮@示的第一個項的前面時 mRecyclerView.scrollToPosition(n); }else if ( n <= lastItem ){ //當要置頂?shù)捻椧呀?jīng)在屏幕上顯示時 int top = mRecyclerView.getChildAt(n - firstItem).getTop(); mRecyclerView.scrollBy(0, top); }else{ //當要置頂?shù)捻椩诋斍帮@示的最后一項的后面時 mRecyclerView.scrollToPosition(n); //這里這個變量是用在RecyclerView滾動監(jiān)聽里面的 move = true; } }
網(wǎng)站標題:AndroidRecyclerView滾動定位-創(chuàng)新互聯(lián)
當前鏈接:http://vcdvsql.cn/article0/djhhio.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、定制網(wǎng)站、Google、網(wǎng)站建設、服務器托管、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容