Advertisement
Guest User

Untitled

a guest
Feb 20th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. public class RecyclerViewScrollManager {
  2. private final PublishRelay<Void> relay;
  3. private final RecyclerView recyclerView;
  4. private boolean isLoading = false;
  5. private int visibleThreshold = 5;
  6. private int lastVisibleItem;
  7. private int totalItemCount;
  8. private RecyclerView.OnScrollListener scrollListener;
  9.  
  10. public RecyclerViewScrollManager(RecyclerView recyclerView, int visibleThreshold) {
  11. this.visibleThreshold = visibleThreshold;
  12. this.recyclerView = recyclerView;
  13. relay = PublishRelay.create();
  14. }
  15.  
  16. public PublishRelay<Void> getScrollListener() {
  17. scrollListener = buildOnScrollListener((LinearLayoutManager) recyclerView.getLayoutManager());
  18. recyclerView.addOnScrollListener(scrollListener);
  19. return relay;
  20. }
  21.  
  22. @NonNull
  23. private RecyclerView.OnScrollListener buildOnScrollListener(final LinearLayoutManager layoutManager) {
  24. return new RecyclerView.OnScrollListener() {
  25. @Override
  26. public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
  27. super.onScrollStateChanged(recyclerView, newState);
  28. }
  29.  
  30. @Override
  31. public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
  32. super.onScrolled(recyclerView, dx, dy);
  33. totalItemCount = layoutManager.getItemCount();
  34. lastVisibleItem = layoutManager.findLastVisibleItemPosition();
  35. if (!isLoading && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
  36. relay.call(null);
  37. isLoading = true;
  38. }
  39. }
  40. };
  41. }
  42.  
  43. public void setLoading(boolean loading) {
  44. isLoading = loading;
  45. }
  46.  
  47. public boolean isLoading() {
  48. return isLoading;
  49. }
  50.  
  51. public void dispose() {
  52. recyclerView.removeOnScrollListener(scrollListener);
  53. }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement