Android Recycler滚动时查看重复项目

问题描述 投票:0回答:5

我在

RecyclerView
遇到问题。当我在 RV 中移动项目然后滚动时,看到一些项目已重复。

android scroll android-recyclerview move
5个回答
61
投票

我知道已经晚了,但希望它能帮助别人。在您的适配器中覆盖这两个方法。

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
   return position;
}

8
投票

我想我来晚了,但无论如何我会建议一种对我有用的方法,也许有人仍然面临这个问题..
因此,我在nestedScrollView 中添加了我的recyclerview,然后为我的recyclerview 禁用了嵌套滚动。

使用此方法,nestedScrollView 将检测到滚动,并且 recyclerview 在滚动时停止复制项目。

这是我的xml代码:

<androidx.core.widget.NestedScrollView
     android:layout_width="match_parent"
     android:layout_height="match_parent">

     <androidx.recyclerview.widget.RecyclerView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:nestedScrollingEnabled="false"/>

</androidx.core.widget.NestedScrollView>

1
投票

RecyclerView
会回收视图。删除数据时,调用
notifyItemChanged(pos)
notifyDataSetChanged()
方法。


0
投票

问题在于你的

notifyDataSetChanged()

检查您是否正确使用。

即:

private void parseJsonFeed(JSONArray response) {

for (int i = 0; i < response.length(); i++)
        try {
            JSONObject obj = response.getJSONObject(i);
            MyData myData = new MyData();
            myData.setContent_title(obj.getString("content_title"));
            ...
            ...
            ...
            ...
            // adding content to array
            homeList.add(myData);
              } catch (JSONException e) {
            e.printStackTrace();
        }
    //Notifying the adapter that data has been added or changed
   //this must always be called else the recycler would not understand when to stop or start working.
    recyclerViewAdapter.notifyDataSetChanged();
   }

0
投票

我也遇到了完全相同的问题。问题是我设置了两次片段布局:在 Activity_main.xml 中(使用 FragmentContainerView 及其属性“android:name”)和在我的片段类中。

从 FragmentContainerView 中删除“android:name”修复了我的案例中的重复项目

希望对大家有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.