RecycleView中CheckBox全选、反选、单选

思路:首先需要一个Map集合用于存储每一个条目的选中状态。选中哪个条目,则把该条目的位置添加进集合,并设置key为true,删除则设置Map集合中对应的位置的key为false。最后提交的时候,遍历map集合,即可得到所有选中的条目。全选是把Map集合中的key全部设置为true即可,而反选则需要遍历Map集合,判断每个key的状态并设置为相反的状态。

先上适配器的代码

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    /**

     * checkbox的Hashmap集合,一条数据对应一个checkbox状态

     */
    private final HashMap<Integer, Boolean> map;


    /**
     *数据源
这是我的代码   一个list集合   一个上下文对象   一个map集合  
map集合里面的参数  一个是  每一条条目对应的索引,boolean 是被选中的状态
 */
   
private List<SaoHe> saoHes;
Context con;
private onClickLiostener listener;
private HashMap<Integer,Boolean> map;


public CJAdapter(List<SaoHe> saoHes, Context con,HashMap<Integer,Boolean> map) {
    this.saoHes = saoHes;
    this.con = con;
    this.map=map;
}


onBindViewHolder方法里面  写check的点击事件  存入map集合里边
@Override
public void onBindViewHolder(final CJAdapter.ViewHolder holder, final int position) {




    //从map集合获取状态
    holder.check.setChecked(map.get(position));


    holder.check.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            map.put(position, !map.get(position));
            //刷新适配器
            notifyDataSetChanged();

        }
    });



    /**
     * 全选,
     */
    public void selectAll() {
        Set<Map.Entry<Integer, Boolean>> entries = map.entrySet();
        boolean shouldall = false;
        for (Map.Entry<Integer, Boolean> entry : entries) {
            Boolean value = entry.getValue();
            if (!value) {
                shouldall = true;
                break;
            }
        }


        for (Map.Entry<Integer, Boolean> entry : entries) {
            entry.setValue(shouldall);
        }
        notifyDataSetChanged();
    }


    /**
     * 反选
     */
    public void neverAll() {
        Set<Map.Entry<Integer, Boolean>> entries = map.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            entry.setValue(!entry.getValue());
        }
        notifyDataSetChanged();
    }


    /**
     * 单选
     * @param postion
     */
    public void singleSelect(int postion) {
        Set<Map.Entry<Integer, Boolean>> entries = map.entrySet();
        for (Map.Entry<Integer, Boolean> entry : entries) {
            entry.setValue(false);
        }
        map.put(postion, true);
        notifyDataSetChanged();
    }





    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.txt.setText(list.get(position));
        //从map集合获取状态
        holder.checkBox.setChecked(map.get(position));



//  点击删除的代码

CangJingFragment.delect.setOnClickListener(new View.OnClickListener() {

    private SaoHeDao saoHeDao;

    @Override
    public void onClick(View v) {
        Set<Map.Entry<Integer, Boolean>> entries = map.entrySet();
        for(Map.Entry<Integer, Boolean> en:entries){
            Integer key = en.getKey();
            Boolean value = en.getValue();
            if(value){
                saoHes.remove(key);
                CangJingFragment.saoHeDao.deleteByKey(saoHes.get(key).getId());

                saoHeDao = MyApp.getApplication().getDaoSession().getSaoHeDao();
                saoHes = saoHeDao.loadAll();
                CangJingFragment.cj.setLayoutManager(new LinearLayoutManager(con));
                CangJingFragment.cj.setAdapter(new CJAdapter(CJAdapter.this.saoHes,con,map));


                notifyDataSetChanged();

            }else{

            }

        }
    }
});



    static class MyViewHolder extends RecyclerView.ViewHolder {
        View itemView;
        private TextView txt;
        private CheckBox checkBox;


        public MyViewHolder(View itemView) {
            super(itemView);
            this.itemView = itemView;
            txt = (TextView) itemView.findViewById(R.id.txt);
            checkBox = (CheckBox) itemView.findViewById(R.id.cbox);
        }
    }

}


Activity的代码:

public class MainActivity extends AppCompatActivity {


    private MyAdapter myAdapter;
    private LinearLayoutManager linearLayoutManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化控件
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);


        //在加载数据之前配置
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);


        //创建一个适配器
        myAdapter = new MyAdapter();
        recyclerView.setAdapter(myAdapter);
    }



for (int i = 0; i <saoHes.size() ; i++) {
    map.put(i,false);
}


    /**
     * 全选
     * @param view
     */
    public void btnAll(View view) {
        myAdapter.selectAll();
    }


    /**
     * 单选
     * @param view
     */
    public void btnner(View view) {
        myAdapter.neverAll();
    }
}

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页