RecycleView中checkbox的单选问题

http://blog.csdn.net/aiaifei/article/details/52119140  解决不断刷新问题

今天在项目中遇到了需要在recycleview中添加checkbox的,并且每次只能勾选一个,勾中当前项时,需要将上一个变未勾中状态。

一、思路

一.建立一个集合,负责保存被选中的item
二.当勾中一个checkbox时
1.如果是勾中该对象,将集合清空(保证只有一个被选中的item),讲数据加入选中集合。触发回调(负责刷新界面)
2.如果是取消,从集合中清楚。
3.checkbox的情况根据集合中是否包含该数据来判断

holder.mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
 {    @Override   
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {     
  if (isChecked && mChoseData.size() > 0)
     {       
         mChoseData.clear();    
      }    
   
         //加入选中的集合      
         mChoseData.add(mData.get(position)); 
        //当有新的选中时 其他的都置成未选中状态  
      if (isChecked) {   
         mData.get(position).setCheck(isChecked);    
         mCheckListener.OnItemCheck(mData.get(position),position);   
     } else {         
         mChoseData.remove(mData.get(position));     
   }   
 }
});
      holder.mCheckBox.setTag(mData.get(position));
if (mChoseData.contains(mData.get(position)))    
        holder.mCheckBox.setChecked(true);
else {   
        holder.mCheckBox.setChecked(false);
}

刷新界面
由回调触发刷新界面的操作,因为使用的是recycleview,并且事件写在了onBindViewHolder中。这个方法是用来刷新每一个recycler item的。所以在onBindViewHolder里的某些组件里的事件方法做notifyDataSetChanged,onBindViewHolder就会频繁执行。解决方案是延时1s,触发刷新的方法。

new Handler().postDelayed(new Runnable() {   
 @Override    
public void run() {     
   mAdapter.notifyDataSetChanged(); 
   }
},1000);

还有一种通过标志位解决的方法在stackoverflow中

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

推荐阅读更多精彩内容