美文网首页
RecyClerView 中使用CheckBox 滑动中chec

RecyClerView 中使用CheckBox 滑动中chec

作者: androidfan | 来源:发表于2018-12-20 16:32 被阅读0次

做了一个列表页面,是用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 是不会掉进坑里的,哈哈。

相关文章

网友评论

      本文标题:RecyClerView 中使用CheckBox 滑动中chec

      本文链接:https://www.haomeiwen.com/subject/daoykqtx.html