首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
ListView使用CheckBox值没重置
更新时间:2022-09-25 09:43:41
阅读数:767
发布者:落幕
(1)ListView使用了ViewHolder时,组件是重复使用的,下面放就会出问题,如下代码: ```java viewHolder.checkBox.setChecked(taskList.get(position).isChecked()); viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { task.setChecked(isChecked); } }); ``` 由于组件的重用,checkBox.setChecked调用时,OnCheckedChangeListener,还没有重新设置,还是上一个的数据,OnCheckedChangeListener也会调用,因为此时OnCheckedChangeListener调用的还是上一个的数据,所以就会把数据错乱。 正确的调用是: ```java viewHolder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { task.setChecked(isChecked); } }); viewHolder.checkBox.setChecked(taskList.get(position).isChecked()); ``` 此时先重新设置了OnCheckedChangeListener,把跟换了以前的数据,换成了现在的数据,就不会出现数据错误。