android holder设置对象会导致数据错乱,Android RecyclerView中ViewHolder的复用导致数据错乱解决办法...

本文探讨了Android RecyclerView中因ViewHolder复用导致数据错乱的问题,并提出了一种解决方案:通过在数据集合中预留字段保存item状态。通过在适配器中更新并保存每个item的选中状态,避免了状态丢失。这种方法直观易懂,适用于解决ListView、GridView等组件类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看图:

007f6a37b8530af9ff78cb6725053e7f.png

视觉效果、recyclerview的基本用法都不说了,超级简单,稍后看代码。

重点来说说item状态的保存问题,其实这个也不是什么新鲜问题,处理起来也不难,方法众多,有setTag的,也有保存到map的。接下来我展示一种自认为更优的方式。

先描述问题,如上图,我们选中了第三个item。然后滑动RecyclerView,让第三个item移出界面后,在滑回来,item的状态是否还在?

由于滑动,view的复用,会丢失之前item选中的状态,但是,但是,item上显示的数据为什么没有错乱呢?这是因为数据集合没有错乱。那么我们能不能把item上需要保存的状态,也与数据集合一同保存呢?这样是不是就不会错乱。当然可以,这样更容易理解。

在数据集合中需要预留本地字段来保存状态。

适配器中的部分代码:

public class MyAdapter extends RecyclerView.Adapter {

//...

private ArrayList mLists = new ArrayList<>();

//...

}

故,UserBean中添加字段:

public c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值