int itemsOnScreen = rv.getLayoutManager().getChildCount();
int itemsOnScreen = rv.getLayoutManager().getChildCount();
@Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); if (dy > 0) { int pastVisibleItems = 0, visibleItemCount, totalItemCount; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); visibleItemCount = layoutManager.getChildCount(); totalItemCount = layoutManager.getItemCount(); // Already covers the GridLayoutManager case if (layoutManager instanceof LinearLayoutManager) { pastVisibleItems = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition(); } else if (layoutManager instanceof StaggeredGridLayoutManager) { int[] positions = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(null); if (positions != null && positions.length > 0) pastVisibleItems = positions[0]; } if ((visibleItemCount + pastVisibleItems) >= totalItemCount) { onScrolledDown(recyclerView); } } }
/** * Returns the adapter position of the last fully visible view. This position does not include * adapter changes that were dispatched after the last layout pass. * * @return The adapter position of the last fully visible view or * {@link RecyclerView#NO_POSITION} if there aren't any visible items. */ public int findLastCompletelyVisibleItemPosition() { final View child = findOneVisibleChild(layoutManager.getChildCount() - 1, -1, true, false); return child == null ? RecyclerView.NO_POSITION : recyclerView.getChildAdapterPosition(child); }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); currentScrollState = newState; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if ((visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - 1)) { onLoadNextPage(recyclerView); } }
@NonNull private RecyclerView.LayoutManager getLayoutManagerMock(int childCount) { RecyclerView.LayoutManager layoutManagerMock = mock(RecyclerView.LayoutManager.class); when(layoutManagerMock.getChildCount()).thenReturn(childCount); return layoutManagerMock; }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); currentScrollState = newState; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if ((visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - minPositionToEndless)) { onLoadMore(recyclerView); } }
if (layoutManager == null || layoutManager.getChildCount() <= 0) { return;
switch (layoutManagerType) { case LINEAR: mVisibleItemCount = layoutManager.getChildCount(); mLastVisibleItemPosition = ((LinearLayoutManager) layoutManager).findLastVisibleItemPosition(); case GRID:
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int[] lastVisibleItemPosition = ((StaggeredGridLayoutManager) layoutManager) .findLastVisibleItemPositions(null); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if (!mIsAllLoaded && visibleItemCount > 0 && (newState == RecyclerView.SCROLL_STATE_IDLE) && ((lastVisibleItemPosition[0] >= totalItemCount - 1) || (lastVisibleItemPosition[1] >= totalItemCount - 1))) { mPhotoPresenter.loadMore(); mPhotoListAdapter.showFooter(); mPhotoRv.scrollToPosition(mPhotoListAdapter.getItemCount() - 1); } }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); currentScrollState = newState; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if (visibleItemCount != 0) { int bottomOffset = (totalItemCount - lastVisibleItemPosition - 1) * (recyclerView.getHeight()) / visibleItemCount; if (visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE) { if (listener != null && listener.get() != null) { listener.get().onLoadMore(bottomOffset); } } } }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); LayoutManager layoutManager = recyclerView.getLayoutManager(); int lastVisibleItemPosition = ((LinearLayoutManager) layoutManager) .findLastVisibleItemPosition(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if (!mIsAllLoaded && visibleItemCount > 0 && newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItemPosition >= totalItemCount - 1) { mNewsListPresenter.loadMore(); mNewsListAdapter.showFooter(); mNewsRV.scrollToPosition(mNewsListAdapter.getItemCount() - 1); } }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); currentScrollState = newState; RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if ((visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE && (lastVisibleItemPosition) >= totalItemCount - 1)) { onLoadNextPage(recyclerView); } }
int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if (visibleItemCount > 0
int visibleItemCount = layoutManager.getChildCount(); int totalItemCount = layoutManager.getItemCount(); if (visibleItemCount > 0
@Override public int findTargetSnapPosition(RecyclerView.LayoutManager lm, int velocityX, int velocityY) { final int itemCount = lm.getItemCount(); if (itemCount == 0) { return RecyclerView.NO_POSITION; } final int childCount = lm.getChildCount(); if (childCount == 0) { return RecyclerView.NO_POSITION; } final boolean leftDirection = velocityX > 0; if (leftDirection) { final View leftChild = lm.getChildAt(0); final int leftChildPos = lm.getPosition(leftChild); final int leftChildRight = lm.getDecoratedRight(leftChild); return Math.min(itemCount - 1, leftChildPos + (leftChildRight > 0 ? 1 : 2)); } else { final View rightChild = lm.getChildAt(childCount - 1); final int rightChildPos = lm.getPosition(rightChild); return Math.max(0, rightChildPos - 1); } }
/** * Return the child view that is currently closest to the start of this parent. * * @param layoutManager The {@link LayoutManager} associated with the attached {@link * RecyclerView}. * @param helper The relevant {@link OrientationHelper} for the attached {@link RecyclerView}. * @return the child view that is currently closest to the start of this parent. */ @Nullable private static View findViewClosestToStart( LayoutManager layoutManager, OrientationHelper helper) { int childCount = layoutManager.getChildCount(); if (childCount == 0) { return null; } View closestChild = null; final int start = helper.getStartAfterPadding(); int absClosest = Integer.MAX_VALUE; for (int i = 0; i < childCount; i++) { final View child = layoutManager.getChildAt(i); int childStart = helper.getDecoratedStart(child); int absDistance = Math.abs(childStart - start); /** if child start is closer than previous closest, set it as closest * */ if (absDistance < absClosest) { absClosest = absDistance; closestChild = child; } } return closestChild; }
/** @return the first View whose start is before the start of this recycler view */ @Nullable private static View findFirstViewBeforeStart(LayoutManager layoutManager, OrientationHelper helper) { int childCount = layoutManager.getChildCount(); if (childCount == 0) { return null; } View closestChild = null; final int start = helper.getStartAfterPadding(); int absClosest = Integer.MAX_VALUE; for (int i = 0; i < childCount; i++) { final View child = layoutManager.getChildAt(i); int childStart = helper.getDecoratedStart(child); int absDistance = Math.abs(childStart - start); if (childStart < start && absDistance < absClosest) { absClosest = absDistance; closestChild = child; } } return closestChild; }
public RecyclerViewLayoutManagerAssert hasChildCount(int count) { isNotNull(); int actualCount = actual.getChildCount(); assertThat(actualCount) // .overridingErrorMessage("Expected child count <%s> but was <%s>.", count, actualCount) // .isEqualTo(count); return this; }
@Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); int visibleItemCount = layoutManager.getChildCount(); boolean triggerCondition = visibleItemCount > 0 && newState == RecyclerView.SCROLL_STATE_IDLE && canTriggerLoadMore(recyclerView); if (triggerCondition) { onLoadMore(recyclerView); } }