gpt4 book ai didi

java - 我的 RecyclerView 项目添加代码时出现异常

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:17 25 4
gpt4 key购买 nike

我想要添加到 RecyclerView 中的 3 种类型的项目:一个按钮(内部有按钮的项目)、一个虚拟项目(显示为空的项目)、一个普通项目(内部有一些内容的项目)。

我将编写一个场景来描述添加/删除过程,当它应该可以工作但由于某种原因而无法工作时。

场景:

-向 RecyclerView 添加一个按钮 + 虚拟按钮,它们显示得很好。

 WidgetItem dummy = new WidgetItem(true);
arrayList.add(0, dummy);
ca.notifyItemInserted(0);//ca is my adapter

WidgetItem btnHolder = new WidgetItem();
btnHolder.setButton(true);
arrayList.add(0, btnHolder);
ca.notifyItemInserted(0);

-添加另一个普通元素+2个假人-->很好


if (nbrItems % 3 == 0) {
for (int i = 0; i < 2; i++) {
WidgetItem dummy = new WidgetItem(true);
dummy.setTilte("dummy" + i);
arrayList.add(0, dummy);
ca.notifyItemInserted(0);
}
}
arrayList.add(0, wItem);
ca.notifyItemInserted(0);

-删除 1 个虚拟元素 + 添加一个普通元素 -->fine

 if ((nbrDummy == 3)||(nbrDummy == 2))
for (int i = 0; !foundDummy; i++) {
if (cii.get(i).getDummy()) {
arrayList.remove(i);
ca.notifyItemRemoved(i);
foundDummy = true;
}

}
arrayList.add(0, wItem);
ca.notifyItemInserted(0);

-删除1个虚拟元素+添加一个普通元素(与上面相同)-->不好

此时,问题发生了,我没有得到第三个“正常项目”,而是在显示屏中得到了另一个虚拟元素。

令我困惑的是,我的自定义适配器中的“onCreateViewHolder”方法在这一步甚至没有被调用,而在之前的方法中它被调用得很好。即使刚刚显示的项目是一个虚拟项目,“onCreateViewHolder”方法也应该至少像它应该的那样执行。

但是代码直接跳到了“onBindViewHolder”方法。

我怀疑删除该虚拟对象后可能发生了一些事情,但又为什么它在上面的代码中运行良好。

删除虚拟对象后,我尝试了“notifyItemRangeChanged”,但整个 recyclerView 弄乱了。

那么是的,这里发生了什么?

最佳答案

我认为我的问题是由于 RecyclerView 的工作方式造成的。

当我从列表中删除一个项目并创建另一个项目后,我删除的旧项目又回来了。

因此,在尝试了几件事之后,我发现将 recyclerView.getRecycledViewPool().clear(); 放在项目删除和创建代码之间解决了我的问题。

关于java - 我的 RecyclerView 项目添加代码时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55613546/

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