Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class RecyclerViewScrollManager {
- private final PublishRelay<Void> relay;
- private final RecyclerView recyclerView;
- private boolean isLoading = false;
- private int visibleThreshold = 5;
- private int lastVisibleItem;
- private int totalItemCount;
- private RecyclerView.OnScrollListener scrollListener;
- public RecyclerViewScrollManager(RecyclerView recyclerView, int visibleThreshold) {
- this.visibleThreshold = visibleThreshold;
- this.recyclerView = recyclerView;
- relay = PublishRelay.create();
- }
- public PublishRelay<Void> getScrollListener() {
- scrollListener = buildOnScrollListener((LinearLayoutManager) recyclerView.getLayoutManager());
- recyclerView.addOnScrollListener(scrollListener);
- return relay;
- }
- @NonNull
- private RecyclerView.OnScrollListener buildOnScrollListener(final LinearLayoutManager layoutManager) {
- return 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);
- totalItemCount = layoutManager.getItemCount();
- lastVisibleItem = layoutManager.findLastVisibleItemPosition();
- if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
- relay.call(null);
- isLoading = true;
- }
- }
- };
- }
- public void setLoading(boolean loading) {
- isLoading = loading;
- }
- public boolean isLoading() {
- return isLoading;
- }
- public void dispose() {
- recyclerView.removeOnScrollListener(scrollListener);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement