【发布时间】:2018-06-14 15:03:28
【问题描述】:
我有一个根垂直回收器视图,并且项目是
- ViewPager
- 水平回收站视图
- 水平回收站视图 ...
第一次加载数据时,当入口动画停止时,根回收器视图会稍微滚动,第二个项目(回收器视图)完全可见。
为什么会这样?以及如何避免这种自动滚动。
【问题讨论】:
标签: android android-recyclerview android-view
我有一个根垂直回收器视图,并且项目是
第一次加载数据时,当入口动画停止时,根回收器视图会稍微滚动,第二个项目(回收器视图)完全可见。
为什么会这样?以及如何避免这种自动滚动。
【问题讨论】:
标签: android android-recyclerview android-view
当您调用notifyDataSetChanged 或notifyItemsInserted 时,它会触发RecyclerView 中的requestLayout。
布局后,RecyclerView 尝试recoverFocusFromState。当它找到第一个可聚焦的孩子时,它会尝试将其完全纳入视野。如果在布局结束时该可聚焦子项部分可见,则会导致滚动并且可聚焦子项将完全可见。
在上述情况下,子 RecyclerView 是 focusable 子。 ProgressBar 或任何其他 focusable 视图也可能发生同样的情况
如果您知道您的子视图不可聚焦。你可以添加
android:descendantFocusability="blocksDescendants"
到你的根RecyclerView
将focusable="false" 添加到您的不可聚焦的孩子
【讨论】:
使用在此问题上发布的解决方案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)
}
}
});
【讨论】:
你可以试试这些;
android:descendantFocusability="blocksDescendants" 添加到您的父布局或回收站视图中android:focusableInTouchMode="true" 添加到您的父布局或回收站视图中recyclerView.scrollToPosition(0)
【讨论】: