【问题标题】:Recycler View automatically scrolls to inner recycler view on first load回收站视图在首次加载时自动滚动到内部回收站视图
【发布时间】:2018-06-14 15:03:28
【问题描述】:

我有一个根垂直回收器视图,并且项目是

  1. ViewPager
  2. 水平回收站视图
  3. 水平回收站视图 ...

第一次加载数据时,当入口动画停止时,根回收器视图会稍微滚动,第二个项目(回收器视图)完全可见。

为什么会这样?以及如何避免这种自动滚动。

【问题讨论】:

    标签: android android-recyclerview android-view


    【解决方案1】:

    当您调用notifyDataSetChangednotifyItemsInserted 时,它会触发RecyclerView 中的requestLayout

    布局后,RecyclerView 尝试recoverFocusFromState。当它找到第一个可聚焦的孩子时,它会尝试将其完全纳入视野。如果在布局结束时该可聚焦子项部分可见,则会导致滚动并且可聚焦子项将完全可见。

    在上述情况下,子 RecyclerViewfocusable 子。 ProgressBar 或任何其他 focusable 视图也可能发生同样的情况

    解决方案 1

    如果您知道您的子视图不可聚焦。你可以添加

        android:descendantFocusability="blocksDescendants"
    

    到你的根RecyclerView

    解决方案 2

    focusable="false" 添加到您的不可聚焦的孩子

    【讨论】:

      【解决方案2】:

      使用在此问题上发布的解决方案https://github.com/airbnb/epoxy/issues/224 这是对我有用的代码 sn-p

      recyclerview.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
          @Override
          public void onItemRangeInserted(int positionStart, int itemCount) {
              if(positionStart == 0) {
                  (recyclerview.layoutManager as LinearLayoutManager).scrollToPositionWithOffset(positionStart,0)
             }
          }
      });
      

      【讨论】:

        【解决方案3】:

        你可以试试这些;

        1. android:descendantFocusability="blocksDescendants" 添加到您的父布局或回收站视图中
        2. android:focusableInTouchMode="true" 添加到您的父布局或回收站视图中
        3. 不是一个好的解决方案,但也许你现在可以尝试:recyclerView.scrollToPosition(0)

        【讨论】:

          猜你喜欢
          • 2016-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-26
          • 2016-11-10
          • 1970-01-01
          • 2023-03-17
          相关资源
          最近更新 更多