滚动时Android RecyclerView重复项

Posted

技术标签:

【中文标题】滚动时Android RecyclerView重复项【英文标题】:Android RecyclerView Duplicate Item When Scrolling 【发布时间】:2016-09-27 04:19:56 【问题描述】:

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

【问题讨论】:

请添加您的代码 在这里查看答案***.com/a/36327143/3145960 @mehrdadkhosravi 现在添加了代码。 @ReazMurshed 你的回答没有解决我的问题。 【参考方案1】:

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

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

这是我的 xml 代码:

<androidx.core.widget.NestedScrollView
     android:layout_
     android:layout_>

     <androidx.recyclerview.widget.RecyclerView
          android:layout_
          android:layout_
          android:nestedScrollingEnabled="false"/>

</androidx.core.widget.NestedScrollView>

【讨论】:

你拯救了我的一天。谢谢你。此外,我没有添加“nestedScrollingEnabled=false”,但它仍然有效。 很高兴听到@PinkRabbits,但请记住,这将停止 recyclerview 的主要功能,即回收物品。 你拯救了我的一天......我花了大约 5-6 个小时来寻找这个问题,但在你的解决方案之前没有任何效果!!非常感谢.... 谢谢你,它就像一个魅力。【参考方案2】:

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

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


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

【讨论】:

给出一些解释:getItemViewType 的默认实现返回 0,假设适配器为单一视图类型。覆盖它可以让适配器知道有多种视图类型并相应地进行调整。【参考方案3】:

问题出在你的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();
   

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于滚动时Android RecyclerView重复项的主要内容,如果未能解决你的问题,请参考以下文章

嵌套的scrollview + recyclerview,奇怪的自动滚动行为[重复]

单击项目Android时RecyclerView滚动

焦点更改时强制 RecyclerView 滚动(Android TV)

如何在android的Recyclerview中显示更多[重复]

应用程序在 recyclerview 滚动 android kotlin 时崩溃

当我滚动我的Recyclerview时,图像会不断改变它的位置并重复图像