Android中ListView中有Checkbox时,想获得item的position,以及全选,反选

想要获得item的position,其实可以直接settag(position)

全选,反选的话,用一个map集合来存储Checkbox的状态即可

首先要自定义好BaseAdapter
如下:

class myBaseAdapter extends BaseAdapter {

        class ViewHolder {
            private ImageView icon;
            private TextView name_Tv, desc_Tv;
            private CheckBox checkBox;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub

            ViewHolder viewHolder;
            TaskInfo taskInfo;
            if (position == 0) {
                TextView view = new TextView(JinChengGuanLiActivity.this);
                view.setText("用户进程(" + userTaskInfos.size() + ")");
                view.setTextColor(Color.WHITE);
                view.setBackgroundColor(Color.GRAY);
                return view;
            } else if (position == userTaskInfos.size() + 1) {
                TextView view = new TextView(JinChengGuanLiActivity.this);
                view.setText("系统进程(" + systemTaskInfos.size() + ")");
                view.setTextColor(Color.WHITE);
                view.setBackgroundColor(Color.GRAY);
                return view;
            }

            if (convertView != null && convertView instanceof ViewGroup) {
                viewHolder = (ViewHolder) convertView.getTag();
            } else {
                convertView = View.inflate(JinChengGuanLiActivity.this,
                        R.layout.jinchengguanli_listview, null);
                viewHolder = new ViewHolder();
                viewHolder.icon = (ImageView) convertView
                        .findViewById(R.id.jinchengguanli_icon);
                viewHolder.name_Tv = (TextView) convertView
                        .findViewById(R.id.jinchengguanli_name);
                viewHolder.desc_Tv = (TextView) convertView
                        .findViewById(R.id.jinchengguanli_inrom);
                viewHolder.checkBox = (CheckBox) convertView
                        .findViewById(R.id.jinchengguanli_checkbox);
                convertView.setTag(viewHolder);
            }

            if (position <= userTaskInfos.size()) {
                taskInfo = userTaskInfos.get(position - 1);
            } else {
                taskInfo = systemTaskInfos.get(position - userTaskInfos.size()
                        - 2);
            }

            viewHolder.icon.setImageDrawable(taskInfo.getIcon());
            viewHolder.name_Tv.setText(taskInfo.getName());
            viewHolder.desc_Tv.setText("占用内存" + taskInfo.getMemory());
            viewHolder.checkBox.setTag(position);

            viewHolder.checkBox.setChecked(isCheckMap.get(position));

            viewHolder.checkBox
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            // TODO Auto-generated method stub
                            int id = (Integer) buttonView.getTag();
                            isCheckMap.put(id, isChecked);
                        }
                    });

            return convertView;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return userTaskInfos.size() + systemTaskInfos.size() + 2;
        }
    }

主要看checkbox的监听那部分
并且在之前通过settag()方法把position存入checkbox中

isCheckBox是一个map集合,HashMap<Integer,Boolean>,存放position,isChecked
所以在getView方法中,我直接设置 checkBox.setChecked(isCheckMap.get(position));
viewHolder.checkBox.setChecked(isCheckMap.get(position));

            viewHolder.checkBox
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {
                            // TODO Auto-generated method stub
                            int id = (Integer) buttonView.getTag();
                            isCheckMap.put(id, isChecked);
                        }
                    });

什么时候初始化的isCheckBox?
在刚开始的时候,我写了个方法:

private void setCheckBox(boolean isChecked) {
        for (int i = 1; i <= userTaskInfos.size(); i++) {
            isCheckMap.put(i, isChecked);
        }
        for (int j = userTaskInfos.size() + 1; j < userTaskInfos.size()
                + systemTaskInfos.size() + 2; j++) {
            isCheckMap.put(j, isChecked);
        }
    }
我用的是setCheckBox(false),设置初始值都为false

这样设置后,再滚动ListView时就不会消失了

如果还要做全选,反选的话
可以根据isCheckBox集合中储存的key-vale来做对应的操作

全选:就直接
setCheckBox(true);
adapter.notifyDataSetChanged();

反选:

inverse_btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                for (int i = 1; i <= userTaskInfos.size(); i++) {
                    isCheckMap.put(i, !isCheckMap.get(i));
                }
                for (int j = userTaskInfos.size() + 1; j < userTaskInfos.size()
                        + systemTaskInfos.size() + 2; j++) {
                    isCheckMap.put(j, !isCheckMap.get(j));
                }
                adapter.notifyDataSetChanged();
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值