解决RecycleView的holder复用而导致checkbox乱选的问题
来源:互联网 发布:淘宝内衣童模叫什么 编辑:程序博客网 时间:2024/06/06 02:21
首先来看一下BUG的效果
从上面可以看到当我点击了第一个Item的checkbox的时候,滚到下面的时候有一个也同时被点击了,这是由于holder的服用导致的Bug。
解决方法有两个:
①、直接设置recycleAdapter禁止复用
viewHolder.setIsRecyclable(false);
当然啦,当数据特别多的时候,这个方法是不可行的,这会导致OOM
②、用一个List来记录每个Item的状态
先贴代码
//解决holder复用问题 private List<Integer> favorList=new ArrayList<>();
这里用一个List来保存每个Item的position,来唯一标识这个Item,当然啦,
得先给这个Item打上一个标签,这个是必须的,标识这个Item,以下代码在onBindViewHolder函数里面实现
((DisViewHolder) holder).favor.setTag(new Integer(position));
接着就是先判断,如果当前这个Item的tag是在List里面,那就代表着选中状态,否则就是未选中状态
if(favorList.contains(((DisViewHolder) holder).favor.getTag())) ((DisViewHolder) holder).favor.setChecked(true); else ((DisViewHolder) holder).favor.setChecked(false);
最后,在favor这个checkbox的setOnCheckedChangeListener监听方法里面如下操作
((DisViewHolder)holder).favor.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) { if (isChecked){ if(!favorList.contains(((DisViewHolder) holder).favor.getTag())){ favorList.add(new Integer(position)); } }else{ if(favorList.contains(((DisViewHolder) holder).favor.getTag())){ favorList.remove(new Integer(position)); } } } });
很明显,当点击checkbox的时候,在ischecked里面的两个if是判断当前的Item是否已经在List里面了,如果在的话那就remove掉,如果不在就add进来。
接着看一下效果
checkbox选择不再错乱了。
至此,文章结束,希望能帮助到有需要的朋友,谢谢。
阅读全文
0 0
- 解决RecycleView的holder复用而导致checkbox乱选的问题
- 解决RecyclerView复用导致EdittText、CheckBox等显示异常的问题
- Android完美解决ListView复用导致的Checkbox状态混乱问题
- Android RecycleView 实现单选列表 并解决View复用导致错乱问题
- recycleview的复用问题
- recycleview中带有checkbox,edittext时的条目复用问题
- ListView中解决因CheckBox导致的焦点问题
- Recycleview 的CheckBox的复用和全选
- RecyclerView+checkbox滑动导致复用混乱问题的解决方案
- RecyclerView 复用与 CheckBox 结合使用导致的问题
- 关于Recycleview的Inconsistency detected. Invalid view holder adapter positionViewHolder
- 解决scrollview嵌套recycleview,recycleview抢走滑动事件的问题
- Recycleview嵌套Recycleview时出现的一个问题-待解决
- 解决RecycleView嵌套RecycleView滑动卡顿的问题
- 关于ListView里面,嵌入Checkbox适配器复用导致的Checkbox混乱问题
- servlet解决中文乱编的问题
- servlet解决中文乱编的问题
- 自定义TextView,解决布局乱的问题
- address align
- 【C】指针的个人体会!!!
- LTE系统调试记录8:发送端发送正弦波详解+8848、30720含义
- Eclipse自动生成作者、日期注释等最强功能设置
- 使用foreach语句遍历数组
- 解决RecycleView的holder复用而导致checkbox乱选的问题
- CentOS 7 安装 MySQL
- 通过程序获取环境变量(ASCII版和Unicode版)
- Android VideoView播放视频
- 多线程——同步-异步-阻塞-非阻塞
- xshell连接wmware虚拟机中的linux系统
- 多线程——临界区-锁
- Linux下可执行文件格式详解
- python中split()函数讲解