Skip to content

Instantly share code, notes, and snippets.

@daolq3012
Created November 21, 2016 06:23
Show Gist options
  • Save daolq3012/428f3379521d72ce702bdf40e9ccea6f to your computer and use it in GitHub Desktop.
Save daolq3012/428f3379521d72ce702bdf40e9ccea6f to your computer and use it in GitHub Desktop.
public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener {
private static final int VISIBLE_THRESHOLD = 5;
private int mPreviousTotal;
private boolean isLoading = true;
private int mFirstVisibleItem;
private int mVisibleItemCount;
private int mTotalItemCount;
private int mCurrentPage = 0;
private LinearLayoutManager mLinearLayoutManager;
public EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) {
this.mLinearLayoutManager = linearLayoutManager;
}
public void refreshData() {
mPreviousTotal = 0;
isLoading = true;
mFirstVisibleItem = 0;
mVisibleItemCount = 0;
mTotalItemCount = 0;
mCurrentPage = 0;
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
mVisibleItemCount = recyclerView.getChildCount();
mTotalItemCount = mLinearLayoutManager.getItemCount();
mFirstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition();
if (isLoading && mTotalItemCount > mPreviousTotal) {
isLoading = false;
mPreviousTotal = mTotalItemCount;
}
if (!isLoading && (mTotalItemCount - mVisibleItemCount) <= (mFirstVisibleItem
+ VISIBLE_THRESHOLD)) {
// End has been reached
// Do something
mCurrentPage++;
onLoadMore(mCurrentPage);
isLoading = true;
}
}
public abstract void onLoadMore(int currentPage);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment