检查RecyclerView是否可滚动

Sou*_*abh 21 android android-recyclerview

如何检查a RecyclerView是否可滚动,即可见区域下方/上方是否有项目

我在我的回收站视图中有一个下拉列表,它使用notifyItemRangeInserted()notifyItemRangeRemoved().每当发生任何这种情况时,我想检查它RecyclerView是否可滚动,因为我必须调整另一个视图,像报摊中的横幅一样

Sim*_*mas 22

你去:

public boolean isRecyclerScrollable() {
  LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
  RecyclerView.Adapter adapter = recyclerView.getAdapter();
  if (layoutManager == null || adapter == null) return false;

  return layoutManager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1;
}
Run Code Online (Sandbox Code Playgroud)

  • 此方法的名称具有误导性。它实际上指示您是否可以从当前位置向下滚动。这意味着即使当前位置上方有很多项目,它也会返回“ false”,并且您可以向上滚动几个屏幕。 (2认同)

Fab*_*chi 20

我找到了一个简单的解决方案,无论您在列表中的位置如何都可以使用:

public boolean isRecyclerScrollable(RecyclerView recyclerView) {
    return recyclerView.computeHorizontalScrollRange() > recyclerView.getWidth() || recyclerView.computeVerticalScrollRange() > recyclerView.getHeight();
}
Run Code Online (Sandbox Code Playgroud)

  • 这确实比接受的答案更好! (4认同)

Sim*_*mas 16

关于什么

// 1 = down; -1 = up; 0 = up or down
recyclerView.canScrollVertically(0)
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案,当前答案不适用于“GridLayoutManager”。`findLastCompletelyVisibleItemPosition()` 始终返回 `-1` (`RecyclerView.NO_POSITION`)。 (2认同)
  • 这应该是可接受的答案,但是(!)不要将“ 0”作为参数!它必须是正整数的负数。如果要检查是否有可滚动的空间,则无论沿哪个方向-使用`(cardlist.canScrollVertically(1)|| cardList.canScrollVertically(-1)` (2认同)
  • recyclerView.canScrollVertically(1) || recyclerView.canScrollVertically(-1) 总是返回 false,那么该怎么办呢? (2认同)