2015-06-25 61 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