Created
November 21, 2016 06:23
-
-
Save daolq3012/428f3379521d72ce702bdf40e9ccea6f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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