RecyclerView与CheckBox结合使用

RecyclerView中每个item中存放CheckBox,实现全选,全不选,删除选中数据,全部删除等功能

1.界面的效果

234231730223678939.jpg

2.Adapter

public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.MyViewHolder> implements View.OnClickListener {
   private Context context;
   private List<String> list;
   private List<Boolean> booleanlist=new ArrayList<>();

   public MyRecyclerViewAdapter(Context context) {
        this.context=context;
        list=new ArrayList<>();
   }

   public MyRecyclerViewAdapter(Context context,List<String> list) {
        this.context=context;
        this.list=list;
        for (int i = 0; i < list.size(); i++) {
            //设置默认的显示
            booleanlist.add(false);
        }
   }

   public void addData(List<String> strings){
     
        list.addAll(strings);
        for (int i = 0; i < strings.size(); i++) {
            booleanlist.add(false);
        }
        notifyDataSetChanged();
   }

   //更改集合内部存储的状态
   public void initCheck(boolean flag) {
        
        for (int i = 0; i < list.size(); i++) {
           //更改指定位置的数据
           booleanlist.set(i,flag);
        }
   }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                context).inflate(R.layout.list_item1, parent,
                false));
        return holder;
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.tv.setText(list.get(position));
   
        holder.cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
              //用集合保存当前的状态
              booleanlist.set(position,isChecked);
            }
        });

        holder.cb.setChecked(booleanlist.get(position));
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    //清空所有数据
    public void deleteAllData() {

        list.clear();
        booleanlist.clear();
        notifyDataSetChanged();

    }

    //删除选中的数据
    public void deletingData() {

        int y=0;
        for (int i = 0; i < list.size(); i++) {
            if(booleanlist.get(i)!=null && booleanlist.get(i) ) {
                list.remove(i);
                booleanlist.remove(i);
                y++;
                i--;
            }
        }
        notifyDataSetChanged();

        if(y==0){
            Toast.makeText(context, "没有选中的要删除的数据", Toast.LENGTH_SHORT).show();
        }
    }

    public void selectAll(){
        initCheck(true);
        notifyDataSetChanged();
    }
    public void unSelectAll(){
        initCheck(false);
        notifyDataSetChanged();
    }

   
    /**
     * ViewHolder的类,用于缓存控件
     */
    class MyViewHolder extends RecyclerView.ViewHolder {

        CheckBox cb;
        TextView tv;
        public MyViewHolder(View view) {
            super(view);
            cb = (CheckBox) view.findViewById(R.id.list_item1_cb);
            tv = (TextView) view.findViewById(R.id.list_item1_tv);

        }

    }
}

3.说明

CheckBox 需要设置当前的选中状态,每次改变状态的时候,要记住当前的选中状态。
RecyclerView使用,详情请参考:
https://www.jianshu.com/p/4ca091bb8638
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,327评论 25 709
  • 【Android 控件 RecyclerView】 概述 RecyclerView是什么 从Android 5.0...
    Rtia阅读 308,120评论 27 439
  • 陌上花开 春意再来,那年夏天你与我朝朝手,如果时光能倒流我愿意在那棵大树下等你又一个夏季,这便是时光的诗与远方
    昭阳残羽阅读 1,794评论 0 0
  • 《回乡祭祖》 月魅 把人民币置换成闵币 在你的坟前燃烧 当火焰化成灰烬 我们焚香敬酒磕头 有说有笑的祝福语 是你所...
    月魅阅读 2,463评论 0 4
  • 室友将我惊吓 小灯桌子卧榻 毫不光明正大 不禁惊讶 暗推精深博大
    今年二十喜欢吃阅读 2,361评论 5 2