Android中实现全选与反选

来源:互联网 发布:米家软件下载 编辑:程序博客网 时间:2024/05/22 10:49

Adapter

看注释应该就可以看懂了

public class ChatPlayersAdapter extends BaseAdapter {//存放是否选中结果集private List<Boolean> itemChecked = new ArrayList<>();//存放选中的CheckBox文本private List<String> names = new ArrayList<>();/** * 获取选中的个数 * @return */public int getCheckedCount() {    int result = 0;    for (int i = 0; i < itemChecked.size(); i++) {        if (itemChecked.get(i)) {            result++;        }    }    notifyDataSetChanged();    return result;}/** * 全选 按钮监听 */public void setAllChecked() {    //只要集合中包含false,就将该索引的位置改为true    if (itemChecked.contains(false)) {        for (int i = 0; i < itemChecked.size(); i++) {            itemChecked.set(i, true);        }    } else {//全部已经选中状态(true),就全设为false        for (int i = 0; i < itemChecked.size(); i++) {            itemChecked.set(i, false);        }    }    notifyDataSetChanged();}//反选public void setInvert() {    for (int i = 0; i < mDatas.size(); i++) {        itemChecked.set(i, !itemChecked.get(i));    }    notifyDataSetChanged();}/** * 构造器 */public ChatPlayersAdapter(Context context, List<ChatBean> datas) {    super(context);    mDatas = datas;    //初始化:设置默认都是未选的    for (int i = 0; i < mDatas.size(); i++) {        itemChecked.add(false);        //初始化names集合,全部设为空字符串        names.add(i, "");    }}@Overridepublic View getView(final int i, View view, ViewGroup viewGroup) {    final ViewHolder holder;    if (view == null) {        view = mInflater.inflate(R.layout.item_chat, viewGroup, false);        holder = new ViewHolder(view);        view.setTag(holder);    } else {        holder = (ViewHolder) view.getTag();    }    final ChatBean bean = (ChatBean) mDatas.get(i);    holder.chat_item_cb.setText(bean.getName());    holder.chat_item_cb.setOnClickListener(new View.OnClickListener() {        @Override        public void onClick(View view) {            //每次点击CheckBox,就将集合中该索引位置设置为反值            itemChecked.set(i, !itemChecked.get(i));            //设置names集合中的值            setNames(itemChecked.get(i), i, bean);        }    });    holder.chat_item_cb.setChecked(itemChecked.get(i));    setNames(holder.chat_item_cb.isChecked(), i, bean);    return view;}/** *  给names集合设置值,联系人名称 */public void setNames(boolean checked, int i, ChatBean bean) {    if (checked) {        names.set(i, bean.getName());    } else {        names.set(i, "");    }}public static class ViewHolder {    public View rootView;    public CheckBox chat_item_cb;    public ViewHolder(View rootView) {        this.rootView = rootView;        this.chat_item_cb = (CheckBox) rootView.findViewById(R.id.chat_item_cb);        }    }}

Activity/Fragment

初始化方法:initView()

chat_lv = (ListView) inflate.findViewById(R.id.chat_lv);datas = new ArrayList<>();//假数据for (int i = 0; i < 10; i++) {    datas.add(new ChatBean(i + "张三"));}chatPlayersAdapter = new ChatPlayersAdapter(getActivity(), datas);chat_lv.setAdapter(chatPlayersAdapter);btn_all = (Button) inflate.findViewById(R.id.btn_all);btn_invert = (Button) inflate.findViewById(R.id.btn_invert);btn_all.setOnClickListener(this);btn_invert.setOnClickListener(this);    

点击事件

@Overridepublic void onClick(View v) {    switch (v.getId()) {        case R.id.btn_all:            chatPlayersAdapter.setAllChecked();            break;        case R.id.btn_invert:            chatPlayersAdapter.setInvert();            break;    }}
原创粉丝点击