美文网首页
RecyclerView实现单选、全选和取消全选功能

RecyclerView实现单选、全选和取消全选功能

作者: 猫小萌的哥哥 | 来源:发表于2018-04-04 00:51 被阅读2228次

看了网上很多都是用了一个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;然后刷新数据;

相关文章

网友评论

      本文标题:RecyclerView实现单选、全选和取消全选功能

      本文链接:https://www.haomeiwen.com/subject/kdshhftx.html