看了网上很多都是用了一个Map将每一个item的选中状态保存起来,然后去遍历然后去设置数据;我觉得那样太麻烦了,给每个item的实体加一个是否选中的属性就好了
1、activity布局很简单,一个recyclerView,底部悬浮一个view用来全选操作的我按钮;为什么是悬浮的?由于item肯定不止一项吧,不能让全选按钮显示在recyclerView的底部吧;
2、recyclerView的item布局,主要是有个checkbox,其余都是我的业务相关的数据展示;
3、适配器主要逻辑
①写一个需要在activity中回调的接口和方法
private OnCheckOnClickListeneronCheckOnClickListener;
public interface OnCheckOnClickListener {
void onCheckClick(PortIdGetOrder item);
}
public void setOnCheckClickListener(OnCheckOnClickListener onCheckOnClickListener) {
this.onCheckOnClickListener = onCheckOnClickListener;
}
②得到CheckBox控件,然后设置他的选择与否的监听事件
CheckBox checkBox = helper.itemView.findViewById(R.id.checkbox);
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
item.setChecked(!item.isChecked());
onCheckOnClickListener.onCheckClick(item);
notifyDataSetChanged();
}
});
③解决recyclerView复用引起的CheckBox选中显示问题
helper.setChecked(R.id.checkbox, item.isChecked());
④暴露一个供外部使用的全选并刷新数据的方法
public void setData(boolean isCheckAll) {
for (int i =0; i<list.size; i++){
if (isCheckAll) {
list.get(i).setChecked(true);
}else {
list.get(i).setChecked(false);
}
}
notifyDataSetChanged();
}
注意这里的list就是原数据,我只是在item对象里加了一个isChecked的属性,并在这里都设置为true;然后刷新数据;
网友评论