Here is the proper way to paginate with StaggeredGridLayoutManager
.
The only difference is in findFirstVisibleItemPositions()
, which returns an int[]
for the first visible position in each span.
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();
}
}
}
});