notifyDataSetChanged()导致其他recyclerview滚动重置

时间:2019-01-18 10:10:29

标签: android android-recyclerview recycler-adapter horizontal-scrolling recyclerview-layout

我有一个很奇怪的问题。我有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)。但是recyclerview1productOptionRecyclerAdapter没有任何关系。 (是的,如果我在notifyDataSetChanged()中注释了productOptionRecyclerAdapter,那么它不会重置滚动条。)

知道为什么吗?

0 个答案:

没有答案