我有一个水平recyclerview(与一个LinearLayoutManager),它的子项目有一个imageview包裹在一个相关布局中。 recyclerview有三个包含子项的水平行。当滚动回滚视图时,我使用来自http调用的响应更新数据集,并在http响应回调中调用notifydatasetChanged。如果recyclerview子项的高度和宽度是固定值(例如150dp,84dp),recyclerview的行为就像预期的那样,即加载新项目并停留在同一个滚动位置,但如果我将recyclerview的子项的高度和宽度设置为match_parent,并且wrap_content,recyclerview完全刷新并滚动到第一个位置。这是为什么发生? 注意:我已经检查过其他类似的问题,但都没有提供可行的解决方案。Recyclerview在调用notifydatasetchanged后滚动到顶部
main_layout
<android.support.v7.widget.RecyclerView
android:id="@+id/grid_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="110dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="80dp"
android:background="@color/transparent"
android:outlineProvider="bounds"
android:elevation="8dp"
android:padding="0dp"
android:scrollbars="none" />
....
recycler_view_child_item
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="0dp">
<ImageView
android:id="@+id/thumbnail"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:maxWidth="126dp"
android:maxHeight="225dp"
android:padding="0dp"/>
</RelativeLayout>
删除相对布局。由于我将recyclerview的尺寸设置为与父母的尺寸相匹配,因此回收站视图的尺寸可能因设备而异。所以我无法为子视图设置固定大小。回收站视图有三行,因此我设置了childview的高度以匹配父级和宽度以包装内容,以避免回收站视图中子视图之间出现空间。 – Neanderthal
此外,我已将setHasFixedSize设置为true。 – Neanderthal