美文网首页控件与三方的依赖
RecyclerView与CheckBox结合使用

RecyclerView与CheckBox结合使用

作者: 强0808 | 来源:发表于2018-05-28 15:58 被阅读2612次

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

相关文章

网友评论

    本文标题:RecyclerView与CheckBox结合使用

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