亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

如何獲取RecyclerView瀑布流樣式下滑動到底的狀態呢?

如何獲取到瀑布流滑動到底的狀態呢?應用場景是網絡加載圖片,滑動到底了,需要分頁加載下一頁的時候。

正在回答

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
????????????//?由于瀑布流有多個列?所以此處用數組存儲
????????????int?column?=?layout.getColumnCountForAccessibility(null,null);
????????????int?positions[]?=?new?int[column];
????????????//?獲取lastItem的positions
????????????layout.findLastVisibleItemPositions(positions);
????????????for(int?i=0;i<positions.length?;?i++){
????????????????/**
?????????????????*?判斷lastItem的底邊到recyclerView頂部的距離
?????????????????*?是否小于recyclerView的高度
?????????????????*?如果小于或等于?說明滾動到了底部
?????????????????*/
????????????????//?剛才忘了寫判斷是否是最后一個item了
????????????????if(positions[i]?>=?(layout.getItemCount()-column)
????????????????????????&&?layout.findViewByPosition(positions[i]).getBottom()?<=?getHeight()){
????????????????????/**
?????????????????????*?此處實現你的業務邏輯
?????????????????????*/
????????????????????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);
}
1 回復 有任何疑惑可以回復我~
#1

qq_信念_0

position都是+1 不是-1...
2016-01-14 回復 有任何疑惑可以回復我~

RecyclerView的OnScrollLinstener和listView不一樣,沒辦法獲取lastItemPostion。

但是它的LayouManager可以找到lastItem和FirstItem的position(注意:因為StaggeredGridLayoutManager
可能有多個列,所以StaggeredGridLayoutManager獲取到的lastItem可能有多個)。

這里為了復用,我通過重寫onScrollStateChanged自定義了RecyclerView實現,當然,你也使用監聽器的方式實現,核心代碼如下所示:

@Override
public?void?onScrollStateChanged(int?state)?{
????//?如果停止滑動
????if(state?==?SCROLL_STATE_IDLE){
????????//?獲取布局管理器
????????StaggeredGridLayoutManager?layout?=
????????????????(StaggeredGridLayoutManager)?getLayoutManager();
????????//?用來記錄lastItem的position
????????//?由于瀑布流有多個列?所以此處用數組存儲
????????int?positions[]?=?new
????????????????int[layout.getColumnCountForAccessibility(null,null)];
????????//?獲取lastItem的positions
????????/**
?????????*?其他布局管理器可使用同樣方式獲取
?????????*/
????????layout.findLastVisibleItemPositions(positions);
????????for(int?i=0;i<positions.length?;?i++){
????????????/**
?????????????*?判斷lastItem的底邊到recyclerView頂部的距離
?????????????*?是否小于recyclerView的高度
?????????????*?如果小于或等于?說明滾動到了底部
?????????????*/
?????????????
????????????if(layout.findViewByPosition(positions[i]).getBottom()?<=?getHeight()){
????????????????/**
?????????????????*?此處實現你的業務邏輯
?????????????????*/
????????????????Log.e("到底了","true");
????????????????return;
????????????}

????????}

????}
????super.onScrollStateChanged(state);
}


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
明日之星-RecyclerView
  • 參與學習       40763    人
  • 解答問題       131    個

帶領大家學習百變RecyclerView,絕對干貨,告別加班不是夢

進入課程

如何獲取RecyclerView瀑布流樣式下滑動到底的狀態呢?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號