我将ViewPager作为线性布局中的项目,视图寻呼机中的每个项目都包含一个RecyclerView。问题是,无论何时页面最初加载,或者我在ViewPager上更改页面,视图都会自动滚动,因此回收站视图的开头是屏幕的顶部,而不是保持原样。
问题的.gif是here。注意我没有向下滚动,这是自动重新定位。
如何阻止视图自动重新定位到回收站视图的开头?
答案 0 :(得分:24)
您可以将此属性添加到线性布局中。滚动视图的线性布局直接子项。
android:descendantFocusability="blocksDescendants"
答案 1 :(得分:6)
我们遇到了类似的问题。我们有一个垂直RecyclerView
。此垂直RecyclerView
的每个项目都包含水平RecyclerView
,就像在Android TV应用中一样。
当我们将支持库从23.4.0升级到24.0.0时,突然出现了自动滚动。特别是,当我们打开Activity
然后我们返回时,垂直RecyclerView
向上滚动,以便当前水平RecyclerView
行不会被切断并且行完全显示。 / p>
添加android:descendantFocusability="blocksDescendants"
可解决此问题。
但是,我发现了another solution,这也有效。在我们的例子中,垂直RecyclerView
包含在FrameLayout
中。如果我将android:focusableInTouchMode="true"
添加到此FrameLayout
,则问题就会消失。
甚至还有third solution mentioned here,基本上是在孩子/内setFocusable(false)
上调用RecyclerView
。我还没试过这个。
顺便说一下,有open issue on the AOSP。
答案 2 :(得分:1)
我想问题不在您的recyclerview上,而在您的viewpager上。 ViewPager具有 setOffscreenPageLimit 方法,该方法用于定义附加到viewpager的片段的屏幕外页面。如果你在viewpager上附加了3个片段,你可以像这样设置它的参数
viePager.setOffscreenPageLimit(3);
每当您更改寻呼机页面时,其片段仍将处于最后状态。