Android防止嵌套的recyclerview自动重新定位

时间:2016-06-13 05:40:14

标签: android listview android-recyclerview

我将ViewPager作为线性布局中的项目,视图寻呼机中的每个项目都包含一个RecyclerView。问题是,无论何时页面最初加载,或者我在ViewPager上更改页面,视图都会自动滚动,因此回收站视图的开头是屏幕的顶部,而不是保持原样。

问题的.gif是here。注意我没有向下滚动,这是自动重新定位。

如何阻止视图自动重新定位到回收站视图的开头?

3 个答案:

答案 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); 

每当您更改寻呼机页面时,其片段仍将处于最后状态。