如何知道RecyclerView是否有足够的内容可以滚动?

5

目前我正在使用一个带有LinearLayout Manager的RecyclerView和一个EditText作为HeaderView来过滤列表内容。

如果RecyclerView的内容小于RecyclerView本身,我想隐藏EditText。

是否有任何方法可以“询问”RecyclerView或LayoutManager是否其内容可以滚动?

谢谢大家。

3个回答

5

RecyclerView在最后一个位置的item完全可见时无法滚动。

简单来说,就是当最后一个位置的item完全显示时,RecyclerView不能继续滚动了。

mRecyclerView.getLayoutManager().findLastCompletelyVisibleItemPosition() == mRecyclerViewAdapter.getItemCount() - 1;

请确保将 layout_height 设置为 match_parent,否则您将得到不同的高度(初始默认高度),因此最后一个可见元素的编号也会不同。 - Javatar

2
考虑到屏幕尺寸动态变化的答案。
mRecyclerView.getViewTreeObserver().addOnScrollChangedListener(() -> {

    if (mRecyclerView.canScrollVertically(1) && //still scrolling
        mRecyclerView.computeVerticalScrollRange() >= mRecyclerView.getHeight()) { //Big enough for scrolling

        return;  //we still scrolling so early out.
        }

    DoMyFunction();
}

0

1
另一种方法是:recyclerView.getLayoutManager().findLastCompletelyVisibleItemPosition() == adapter.getItemCount() -1; - Nikola Despotoski
@NikolaDespotoski 相当复杂,嗯? - Budius
Budius,谢谢你,但是对我来说,你的代码总是返回true,即使recyclerView没有滚动。@NikolaDespotoski,谢谢你,我稍后会尝试你的方法。 - Leonardo Medori
@NikolaDespotoski 您的解决方案对我很有效,非常感谢。 - Leonardo Medori
@LeonardoMedori 很好。我已将其发布为答案。 - Nikola Despotoski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接