前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决Recyclerview列表中使用CheckBox导致下滑时选中状态混乱

解决Recyclerview列表中使用CheckBox导致下滑时选中状态混乱

作者头像
饮水思源为名
发布2018-09-06 11:26:09
1.9K0
发布2018-09-06 11:26:09
举报
文章被收录于专栏:Android小菜鸡Android小菜鸡

概述

  今天用recyclerview时候发现checkbox重复使用会导致OnCheckedChangeListener 出现一个不太友好的问题,问题是这样的:Recyclerview 会回收使用组件,回收checkbox的时候会触发OnCheckedChangeListener 事件,导致我们写的listener中的逻辑会被打乱。   比如我选中了一个checkbox,那么当view滚动导致这个checkbox 滑动出可视范围的时候 ,OnCheckedChangeListener事件会被触发,这样相当于自动把我选中的取消了。

采用解决方法:

代码语言:javascript
复制
//在初始化checkBox状态和设置状态变化监听事件之前先把状态变化监听事件设置为null
holder.checkBox.setOnCheckedChangeListener(null);
//然后设置CheckBox状态
if(isChecked){
    holder.checkbox.setChecked(true);
}else{
    holder.checkbox.setChecked(false);
}
//然后设置状态变化监听事件
holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListen
@Override
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
    if(isChecked){
        //...
    }else{
        //...
    }
  }
});

分析

1.CheckBox在执行setChecked时会触发OnCheckedChange处理程序; 2.Adapter采用的是控件重用机制,就是当列表往上下拖时,那些被拖出屏幕外的控件会重用,由于该item获取到的数据项(dataList.get(index))往往使用了final,所以在执行CheckBox.setChecked(true/false); 触发该控件的OnCheckedChange处理程序,而这个处理程序指向的数据项是前一次绑定的那行数据,这样就可能导致dataList中的某个数据被意外修改,进而引起程序行为的不确定。

参考文章

https://blog.csdn.net/jdsjlzx/article/details/52426868 https://blog.csdn.net/nerver87/article/details/51291337

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.07.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 采用解决方法:
  • 分析
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档