gpt4 book ai didi

java - 为什么我的 RecyclerView 显示 CardView 项目的顺序不正确?

转载 作者:行者123 更新时间:2023-12-02 08:46:32 25 4
gpt4 key购买 nike

我有一个 Food(类)对象的 CardViews 的 RecyclerView。发生的一件奇怪的事情是,当我使用一种方法将新的 Food 对象添加到我正在使用的 ArrayList 中,并通知适配器已添加值时,卡片会添加到屏幕上,但它有一组不同的值。

默认情况下,我使用 2 个占位符 Food 对象在屏幕上显示,按“添加”按钮应该添加一个名为“Name”的新对象,但我却得到了第一个占位符的另一个副本。

当屏幕上添加了太多卡片时,上下滑动会更改卡片的顺序,突然间,新项目(具有正确的数据)出现!

怎么了?顺便说一句,该应用程序不会崩溃。

将新的 Food 对象添加到名为“foods”的 ArrayList 的函数:

public void addFood(){
foods.add(new Food("Name",0,3,2)); //a constructor
foodAdapter.notifyItemInserted(0);
}

最佳答案

显然,问题在于对 ArrayList 项“foods”调用 .add(Object) 实际上将新对象附加到列表末尾,同时,Adapter.notifyItemInserted(0) 使 Recycler View 认为位置 0拿到了新卡,而实际上它是最后一个位置。这使得 RecyclerView 上显示了错误的项目。

因此,显而易见,解决方法是使用 ArrayList.add(position,object) 构造函数而不是 .add(object),其中position 显示新元素的插入位置。

所以,正确的代码是:

public void addFood(){
foods.add(0, new Food("Name", 0, 3, 2)); //a constructor
foodAdapter.notifyItemInserted(0);
}

如果您希望将新对象插入到不同的位置,只需传递该位置来代替上面的 0。

关于java - 为什么我的 RecyclerView 显示 CardView 项目的顺序不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com