課程
/移動開發(fā)
/Android
/明日之星-RecyclerView
如何獲取到瀑布流滑動到底的狀態(tài)呢?應用場景是網(wǎng)絡加載圖片,滑動到底了,需要分頁加載下一頁的時候。
2015-08-08
源自:明日之星-RecyclerView 3-2
正在回答
sorry,剛才直接在這塊寫的 忘記了判斷是否是最后一個item,下面改正代碼。
@Override public?void?onScrollStateChanged(int?state)?{ ????//?如果停止滑動 ????if(state?==?SCROLL_STATE_IDLE){ ????????LayoutManager?layoutManager?=?getLayoutManager(); ????????if(getLayoutManager()?instanceof?StaggeredGridLayoutManager){ ????????????//?獲取布局管理器 ????????????StaggeredGridLayoutManager?layout?= ????????????????????(StaggeredGridLayoutManager)layoutManager; ????????????//?用來記錄lastItem的position ????????????//?由于瀑布流有多個列?所以此處用數(shù)組存儲 ????????????int?column?=?layout.getColumnCountForAccessibility(null,null); ????????????int?positions[]?=?new?int[column]; ????????????//?獲取lastItem的positions ????????????layout.findLastVisibleItemPositions(positions); ????????????for(int?i=0;i<positions.length?;?i++){ ????????????????/** ?????????????????*?判斷l(xiāng)astItem的底邊到recyclerView頂部的距離 ?????????????????*?是否小于recyclerView的高度 ?????????????????*?如果小于或等于?說明滾動到了底部 ?????????????????*/ ????????????????//?剛才忘了寫判斷是否是最后一個item了 ????????????????if(positions[i]?>=?(layout.getItemCount()-column) ????????????????????????&&?layout.findViewByPosition(positions[i]).getBottom()?<=?getHeight()){ ????????????????????/** ?????????????????????*?此處實現(xiàn)你的業(yè)務邏輯 ?????????????????????*/ ????????????????????Log.e("到底了","true"); ????????????????????break; ????????????????} ????????????} ????????}else?if(getLayoutManager()?instanceof?LinearLayoutManager){ ????????????LinearLayoutManager?layout?= ????????????????????(LinearLayoutManager)?layoutManager; ????????????int?position?=?layout.findLastVisibleItemPosition(); ????????????//?剛才忘了寫判斷是否是最后一個item了 ????????????if(position-1?==?layout.getItemCount() ????????????????????&&?layout.findViewByPosition(position).getBottom()?<=?getHeight()){ ????????????????Log.e("到底了","true"); ????????????} ????????} ????} ????super.onScrollStateChanged(state); }
qq_信念_0
RecyclerView的OnScrollLinstener和listView不一樣,沒辦法獲取lastItemPostion。
但是它的LayouManager可以找到lastItem和FirstItem的position(注意:因為StaggeredGridLayoutManager可能有多個列,所以StaggeredGridLayoutManager獲取到的lastItem可能有多個)。
這里為了復用,我通過重寫onScrollStateChanged自定義了RecyclerView實現(xiàn),當然,你也使用監(jiān)聽器的方式實現(xiàn),核心代碼如下所示:
@Override public?void?onScrollStateChanged(int?state)?{ ????//?如果停止滑動 ????if(state?==?SCROLL_STATE_IDLE){ ????????//?獲取布局管理器 ????????StaggeredGridLayoutManager?layout?= ????????????????(StaggeredGridLayoutManager)?getLayoutManager(); ????????//?用來記錄lastItem的position ????????//?由于瀑布流有多個列?所以此處用數(shù)組存儲 ????????int?positions[]?=?new ????????????????int[layout.getColumnCountForAccessibility(null,null)]; ????????//?獲取lastItem的positions ????????/** ?????????*?其他布局管理器可使用同樣方式獲取 ?????????*/ ????????layout.findLastVisibleItemPositions(positions); ????????for(int?i=0;i<positions.length?;?i++){ ????????????/** ?????????????*?判斷l(xiāng)astItem的底邊到recyclerView頂部的距離 ?????????????*?是否小于recyclerView的高度 ?????????????*?如果小于或等于?說明滾動到了底部 ?????????????*/ ????????????? ????????????if(layout.findViewByPosition(positions[i]).getBottom()?<=?getHeight()){ ????????????????/** ?????????????????*?此處實現(xiàn)你的業(yè)務邏輯 ?????????????????*/ ????????????????Log.e("到底了","true"); ????????????????return; ????????????} ????????} ????} ????super.onScrollStateChanged(state); }
舉報
帶領(lǐng)大家學習百變RecyclerView,絕對干貨,告別加班不是夢
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-01-14
sorry,剛才直接在這塊寫的 忘記了判斷是否是最后一個item,下面改正代碼。
2016-01-14
RecyclerView的OnScrollLinstener和listView不一樣,沒辦法獲取lastItemPostion。
但是它的LayouManager可以找到lastItem和FirstItem的position(注意:因為StaggeredGridLayoutManager
可能有多個列,所以StaggeredGridLayoutManager獲取到的lastItem可能有多個)。
這里為了復用,我通過重寫onScrollStateChanged自定義了RecyclerView實現(xiàn),當然,你也使用監(jiān)聽器的方式實現(xiàn),核心代碼如下所示: