@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); totalItemCount = layoutManager.getItemCount(); lastVisibleItem = layoutManager .findLastVisibleItemPosition(); if (!loading && totalItemCount <= (lastVisibleItem + VISIBLE_THRESHOLD)) { pageNumber++; paginator.onNext(pageNumber); loading = true; } } });
@Override public void onScrolled(androidx.recyclerview.widget.RecyclerView recyclerView, int dx, int dy) { int firstVisibleItemPosition = layoutManager.findFirstVisibleItemPosition(); if (!isLoading() && !isLastPage()) { if (layoutManager.getChildCount() + firstVisibleItemPosition >= layoutManager.getItemCount()) loadNextPage(); } }
@Override public void onScrolled(final RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); visibleItemCount = recyclerView.getChildCount(); totalItemCount = linearLayoutManager.getItemCount(); firstVisibleItem = linearLayoutManager.findFirstVisibleItemPosition(); if (loading) { if (totalItemCount > previousTotal || totalItemCount == 0) { loading = false; previousTotal = totalItemCount; } } // End has been reached if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { currentPage++; recyclerView.post(loadMore); loading = true; } }
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (this.mLayoutManager == null) { this.mLayoutManager = (LinearLayoutManager) recyclerView.getLayoutManager(); } if (mVisibleThreshold == -1) { mVisibleThreshold = findLastVisibleItemPosition(recyclerView) - findFirstVisibleItemPosition(recyclerView); } mVisibleItemCount = recyclerView.getChildCount(); mTotalItemCount = mLayoutManager.getItemCount(); mFirstVisibleItem = findFirstVisibleItemPosition(recyclerView); mTotalItemCount = mAdapter.getItemCount(); if (mLoading) { if (mTotalItemCount > mPreviousTotal) { mLoading = false; mPreviousTotal = mTotalItemCount; } } if (!mLoading && mLayoutManager.findFirstVisibleItemPosition() - mVisibleThreshold <= 0) { mCurrentPage++; onLoadMore(mCurrentPage); mLoading = true; } else { if (isNothingToLoadFeatureEnabled() && isNothingToLoadNeeded()) { onNothingToLoad(); mAlreadyCalledOnNoMore = true; } } }
/** * Checks if more items can be loaded to the RecyclerView * * @return boolean Returns true if can load more items or false if not. */ protected boolean canLoadMoreItems() { final int visibleItemsCount = layoutManager.getChildCount(); final int totalItemsCount = layoutManager.getItemCount(); final int pastVisibleItemsCount = layoutManager.findFirstVisibleItemPosition(); final boolean lastItemShown = visibleItemsCount + pastVisibleItemsCount >= totalItemsCount; return lastItemShown && totalItemsCount >= maxItemsPerRequest; }
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int visibleItemCount = recyclerView.getChildCount(); int totalItemCount = mLinearLayoutManager.getItemCount(); int firstVisibleItem = mLinearLayoutManager.findFirstVisibleItemPosition(); if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + VISIBLE_THRESHOLD)) { // End has been reached onLoadMore(totalItemCount); loading = true; } }
@Test public void testCanLoadMoreItemsShouldBeFalse() { // given int visibleItemsCount = 10; int totalItemsCount = 30; int pastVisibleItemsCount = 15; int itemsPerRequest = 100; InfiniteScrollListener listener = createListener(manager, itemsPerRequest); // when when(manager.getChildCount()).thenReturn(visibleItemsCount); when(manager.getItemCount()).thenReturn(totalItemsCount); when(manager.findFirstVisibleItemPosition()).thenReturn(pastVisibleItemsCount); boolean canLoadMoreItems = listener.canLoadMoreItems(); // then assertThat(canLoadMoreItems).isFalse(); }
@Test public void testCanLoadMoreItemsLogicIsCorrect() { // given int visibleItemsCount = 10; int totalItemsCount = 150; int pastVisibleItemsCount = 20; int itemsPerRequest = 100; InfiniteScrollListener listener = createListener(manager, itemsPerRequest); // when when(manager.getChildCount()).thenReturn(visibleItemsCount); when(manager.getItemCount()).thenReturn(totalItemsCount); when(manager.findFirstVisibleItemPosition()).thenReturn(pastVisibleItemsCount); boolean lastItemShown = visibleItemsCount + pastVisibleItemsCount > totalItemsCount; boolean canLoadMoreItemsExpected = lastItemShown && totalItemsCount >= itemsPerRequest; boolean canLoadMoreItems = listener.canLoadMoreItems(); // then assertThat(canLoadMoreItems).isEqualTo(canLoadMoreItemsExpected); }
@Test public void testCanLoadMoreItemsShouldBeTrue() { // given int visibleItemsCount = 10; int totalItemsCount = 20; int pastVisibleItemsCount = 15; int itemsPerRequest = 10; InfiniteScrollListener listener = createListener(manager, itemsPerRequest); // when when(manager.getChildCount()).thenReturn(visibleItemsCount); when(manager.getItemCount()).thenReturn(totalItemsCount); when(manager.findFirstVisibleItemPosition()).thenReturn(pastVisibleItemsCount); boolean canLoadMoreItems = listener.canLoadMoreItems(); // then assertThat(canLoadMoreItems).isTrue(); }