RecyClerView 中使用CheckBox 滑动中checkBox 状态混乱的解决办法

做了一个列表页面,是用Recyclerview 展示数据的,并且其中有一个CheckBox ,作为收藏和取消收藏的按钮,但是当列表滑动后就发现,CheckBox 的状态是混乱的,现在来说一下原因。我们知道Recyclerview 是Recyclerview 会回收使用组件达到优化性能的效果,回收checkbox的时候会触发OnCheckedChangeListener 事件,这就导致checkbox的listener中的逻辑会被打乱。正常情况下我选中了一个CheckBox 滚动后再回来,肯定还是希望是选中状态,可是当View 滚动带着CheckBox 画出可视范围后,RecyclerView是可能回收掉这个Item的,OnCheckedChangeListener事件会被触发,这样相当于自动把我选中的取消了。
解决的方法有两种

  • 第一种就是给这个CheckBox 设置一个Tag,每次滚动时设置并且判断上一次的Tag,做出相应的选中取消状态
    -第二种就是比较简单的一种了,我们可以在Recyclerview的onBindViewHolder 方法中,先把CheckBox的监听事件置为空,之后再去做相应的点击事件监听
   itemLike.setOnCheckedChangeListener(null);
   Integer attation = item.isAttation();
   itemLike.setChecked(attation == 1 ? true : false);
  itemLike.setOnCheckedChangeListener((buttonView, isChecked) -> {
                    if (isChecked) {
                        atteation(findId, RequestUrl.ATTENTIONAC, true, getAdapterPosition());
                    } else {
                        atteation(findId, RequestUrl.UNATTENTION, false, getAdapterPosition());
                    }
                });

这样的话就可以保证列表在滑动的时候不会导致checkBox的状态混乱
但是,如果后期使用当中,你还是会发现各种混乱的状态的,所以,少年,劝你一开始就使用Imageview 替代checkBox吧,毕竟imageView 是不会掉进坑里的,哈哈。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容