我有一个很奇怪的问题。我有2个recyclerviews(带有水平滚动和recyclerview#2的recyclerview#1)。当我从适配器为recyclerview#2调用notifyDataSetChanged()
时,它将重置在recyclerview#1中的滚动。
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="horizontal" />
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<TextView android:text="Selected: "
style="@style/ProdGroupLabel" />
<TextView android:text="@{prod.name}"
android:maxEms="12"
style="@style/ProdGroupLabel" />
<Button android:id="@+id/buttonedit"
android:text="Edit"
android:visibility="@{menu.hasOptions ? View.VISIBLE : View.INVISIBLE}"
style="@style/ProdGroupButtonEdit"/>
</LinearLayout>
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerview2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="@{menu.hasOptions ? View.VISIBLE : View.GONE}" />
</LinearLayout>
这是我初始化适配器的方式
recyclerview1.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
recyclerview1.addItemDecoration(new SpaceItemDecoration(context, R.dimen.horz_spacing));
recyclerview1.setAdapter(productRecyclerAdapter);
recyclerview1.setHasFixedSize(true);
recyclerview2.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
recyclerview2.setAdapter(productOptionRecyclerAdapter);
recyclerview2.setHasFixedSize(true);
当用户选择产品时,它将更新productOptionRecyclerAdapter
的项目以反映该产品的可用选项。在productOptionRecyclerAdapter
中,当源发生变化时,我打电话给notifyDataSetChanged()
。
问题在于,每次在notifyDataSetChanged()
中调用productOptionRecyclerAdapter
时,它将滚动recyclerview1
到位置(0,0)。但是recyclerview1
与productOptionRecyclerAdapter
没有任何关系。 (是的,如果我在notifyDataSetChanged()
中注释了productOptionRecyclerAdapter
,那么它不会重置滚动条。)
知道为什么吗?