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中

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容