Android RecycleView与Checkbox的使用

本篇文章主要实现两个功能:

1.在 RecyclerView 中使用 CheckBox 时,解决选中一个 CheckBox ,因为复用的关系,造成多个 CheckBox 被选中。
2.实现CheckBox全选功能及数据交互。

问题一:CheckBox重复显示问题:

1.使用bean类将setOnCheckedChangeListener的状态与bean类状态同步。
2.在每次设置checkbox是否选中的时候先把setOnCheckedChangeListener置为null。
代码示例:
首先新建一个bean类,bean类包含业务数据模型及CheckBox状态

public class CheckBoxTestBean {

private String name;
//是否选中状态
private boolean isSelectd;

public boolean isSelectd() {
    return isSelectd;
}
public void setSelectd(boolean selectd) {
    isSelectd = selectd;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}  }

在onBindViewHolder方法中设置CheckBox对应的bean状态

   @Override
public void onBindViewHolder(@NonNull final ChecBoxHolder holder, final int position) {
    if (mCheckBoxTestBeanList != null) {
        holder.mTvName.setText(mCheckBoxTestBeanList.get(position).getName());
        holder.mCbState.setOnCheckedChangeListener(null);
        holder.mCbState.setChecked(mCheckBoxTestBeanList.get(position).isSelectd());
        holder.mCbState.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    mCheckBoxTestBeanList.get(position).setSelectd(true);
                } else {
                    mCheckBoxTestBeanList.get(position).setSelectd(false);
                }
            }
        });
    }
}
问题二:设置全选及获取全选数据

首先在Activity里编写全选的点击事件,然后循环业务数据bean模型,把bean里CheckBox状态全部设置为true,最后设置数据到适配器就可以完成全选。

 mCbAllChoose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                for (int i = 0; i < mCheckBoxTestBeanList.size(); i++) {
                    mCheckBoxTestBeanList.get(i).setSelectd(true);
                }
            } else {
                for (int i = 0; i < mCheckBoxTestBeanList.size(); i++) {
                    mCheckBoxTestBeanList.get(i).setSelectd(false);
                }
            }
            mChecBoxTestAdapter.setCheckBoxListData(mCheckBoxTestBeanList);
            mRyTest1.setAdapter(mChecBoxTestAdapter);
        }
    });

点击确定, 获取选中的数据

    mTvSure.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mCheckBoxTestBeanList = mChecBoxTestAdapter.getCheckBoxTestBeanList();
            if (mCheckBoxTestBeanList != null) {
                int j = 0;
                for (int i = 0; i < mCheckBoxTestBeanList.size(); i++) {
                    //当isSelectd状态为true时,为选中状态
                    if (mCheckBoxTestBeanList.get(i).isSelectd()) {
                        String mName = mCheckBoxTestBeanList.get(i).getName();
                        j++;
                    }
                }
                Toast.makeText(MainActivity.this, "选择了" + j + "个", Toast.LENGTH_SHORT).show();
            }
        }
    });

你可能感兴趣的:(Android RecycleView与Checkbox的使用)