1. 程式人生 > >RecyclerView與CheckBox結合使用錯亂問題

RecyclerView與CheckBox結合使用錯亂問題

RecyclerView是當前流行的資料檢視展示框架

但是,當我們使用RecyclerView與CheckBox結合使用時,碰撞出了勾選錯亂的火花

那麼接下來我們就來粗暴的解決掉這個小火星

首先,我們來看程式碼

private Context context;
private List<MyBean> list;
//首先我們要例項化一個SparseBooleanArray,這個集合物件是Android官方自帶的,想了解的可以瞭解一下
https://www.sogou.com/sie?hdq=AQxRG-0000&query=SparseBooleanArray&ie=utf8
private SparseBooleanArray mCheckStates=new SparseBooleanArray(); //介面卡 public MyAdapter(Context context, List<MyBean> list) { this.context = context; this.list = list; }
  //在onCreateView中基本沒什麼變化
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view= LayoutInflater.from
(context).inflate(R.layout.iten_shop,null); MyViewHolder myViewHolder=new MyViewHolder(view); return myViewHolder; }

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
    
   holder.cb.setTag(position);//在最開始適配的時候,將每一個CheckBox設定一個當前的Tag值,這樣每個CheckBox都有了一個固定的標識
   holder.cb
.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isCheckBox) { int pos= (int) buttonView.getTag();//得到當前CheckBox的Tag值,由於之前儲存過,所以不會出現索引錯亂 if (isCheckBox){
                    //點選時將當前CheckBox的索引值和Boolean存入SparseBooleanArray中
                    mCheckStates.put(pos,true);
                }else {
                   //否則將 當前CheckBox物件從SparseBooleanArray中移除
                    mCheckStates.delete(pos);                  
                }
            }
        });
    //得到CheckBox的Boolean值後,將當前索引的CheckBox狀態改變
    holder.cb.setChecked(mCheckStates.get(position,false));
        if(holder.cb.isChecked()){
            System.out.println("==選中了=");
        }else{
            System.out.println("==取消了=");
        }

}
class MyViewHolder extends RecyclerView.ViewHolder{

    private final CheckBox cb;

    public MyViewHolder(View itemView) {
        super(itemView);
        cb = itemView.findViewById(R.id.ckb_dan);

    }
}

 ----至此,CheckBox錯亂問題完美解決了,怎麼樣,是不是很簡單