滚动时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,奇怪的自动滚动行为[重复]
焦点更改时强制 RecyclerView 滚动(Android TV)
如何在android的Recyclerview中显示更多[重复]