【问题标题】:How to know if a RecyclerView has enough content to scroll?如何知道 RecyclerView 是否有足够的内容来滚动?
【发布时间】:2015-07-14 13:28:10
【问题描述】:

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

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

有没有办法“询问” Recyclerview 或 LayoutManager 的内容是否可以滚动?

谢谢大家。

【问题讨论】:

    标签: java android android-layout android-recyclerview


    【解决方案1】:

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

    在听起来像这样的情况下:

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

    【讨论】:

    • 确保将layout_height 设置为match_parent,否则,您将获得不同的高度(初始默认高度),因此最后一个可见元素的编号也不同。
    【解决方案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();
    }
    

    【讨论】:

      【解决方案3】:

      你的意思是:

      https://developer.android.com/reference/android/support/v7/widget/RecyclerView.LayoutManager.html#canScrollVertically()

      if(recyclerView.getLayoutManager().canScrollVertically()){
          // do stuff
      } else{
          // do other stuff
      }
      

      【讨论】:

      • 替代,recyclerView.getLayoutManager().findLastCompletelyVisibleItemPosition() == adapter.getItemCount() -1;
      • @NikolaDespotoski 相当复杂,嗯?
      • Budius 谢谢你,但对我来说,即使 recyclerView 不滚动,你的代码也总是返回 true。 @NikolaDespotoski 谢谢你,我稍后会尝试你的方法。
      • @NikolaDespotoski 您的解决方案对我有用,非常感谢。
      • @LeonardoMedori 好。我已将其发布为答案。
      猜你喜欢
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 2019-06-21
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多