2015-06-25 65 views
2

我創建了Recycler視圖網格。我想要實現分頁。但我不明白它是如何做到的。我找到了一個答案enter link description here如何創建Recycler View Grid分頁?

但它不適合我。我的LayOutManager中沒有方法mLayoutManager.findFirstVisibleItemPosition();。方法mRecyclerView.setOnScrollListener已棄用。如何在Recycler視圖網格中實現分頁?

+1

一方面,findFirstVisibleItemPosition是LinearLayoutManager實現的一種方法,您只需要使用addOnScrollListener。 –

+0

謝謝你的addOnScrollListener。那麼GridLayoutManager呢?我該怎麼做? – ip696

+0

GridLayoutManager是LinearLayoutManager的子類。 GLM有findFirstVisibleItemPosition方法。 –

回答

-2

我知道答案很晚。對於其他可能遇到此問題的人,請使用此解決方案

mRecyclerView.addOnScrollListener(mRecyclerViewOnScrollListener); 

private RecyclerView.OnScrollListener 
     mRecyclerViewOnScrollListener = new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, 
            int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
     int visibleItemCount = layoutManager.getChildCount(); 
     int totalItemCount = layoutManager.getItemCount(); 
     int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); 

     if (!isLoading && currentPage < totalPages) { 
      if ((visibleItemCount + firstVisibleItemPosition) >= totalItemCount 
        && firstVisibleItemPosition >= 0 
        && totalItemCount >= numberOfItemsInAPage) { 
       loadMoreItems(); 
      } 
     } 
    } 
}; 
-1

以下是與StaggeredGridLayoutManager分頁的正確方法。

唯一的區別在於findFirstVisibleItemPositions(),它爲每個範圍中的第一個可見位置返回int[]

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
    } 

    @Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
     int visibleItemCount = mGridLayoutManager.getChildCount(); 
     int totalItemCount = mGridLayoutManager.getItemCount(); 
     int[] firstVisibleItemPositions = mGridLayoutManager.findFirstVisibleItemPositions(null); 

     if (!mIsLoading && !mIsLastPage) { 
      if ((firstVisibleItemPositions[0] + visibleItemCount) >= totalItemCount 
       && firstVisibleItemPositions[0] >= 0 
       && totalItemCount >= Config.PAGE_SIZE) { 
       loadMorePosts(); 
      } 
     } 
    } 
}); 
+0

findFirstVisibleItemPosition返回一個不是int的整數[]也是'findFirstVisibleItemPosition'而不是'findFirstVisibleItemPositions' – Subho