思路
1触发事件setOnItemClickListener改变CheckBox
2在适配器的getView()里改变CheckBox状态,需要记录选中的CheckBox位置
3适配器提供方法改变CheckBox
4用notifyDataSetChanged启动getView()
实现代码

//适配器public class MyAdapter extends BaseAdapter {        // 填充数据的list        private ArrayList<Map<String, Object>> list;        // 用来控制CheckBox的选中状况        private HashMap<Integer,Boolean> isSelected;        // 上下文        private Context context;        // 用来导入布局        private LayoutInflater inflater = null;        // 构造器        public MyAdapter(ArrayList<Map<String, Object>> list, Context context) {            this.context = context;            this.list = list;            inflater = LayoutInflater.from(context);            isSelected = new HashMap<Integer, Boolean>();            // 初始化数据            initDate();        }        // 初始化isSelected的数据        private void initDate(){            for(int i=0; i<list.size();i++) {                getIsSelected().put(i,false);            }        }        @Override        public int getCount() {            return list.size();        }        @Override        public Object getItem(int position) {            return list.get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            // 导入布局并赋值给convertview            convertView = inflater.inflate(R.layout.item_exchange_self, null);            TextView tv_name = (TextView) convertView.findViewById(R.id.exchange_self_name);            TextView tv_address = (TextView) convertView.findViewById(R.id.exchange_self_address);            TextView tv_date = (TextView) convertView.findViewById(R.id.exchange_self_date);            CheckBox checkBox = (CheckBox) convertView.findViewById(R.id.select_address);            // 设置list中TextView的显示            tv_name.setText(list.get(position).get("name").toString());            tv_address.setText(list.get(position).get("address").toString());            tv_date.setText(list.get(position).get("workDates").toString());            // 根据isSelected来设置checkbox的选中状况            checkBox.setChecked(getIsSelected().get(position));            return convertView;        }        public HashMap<Integer,Boolean> getIsSelected() {            return isSelected;        }        public void setIsSelected(int postiton) {            initDate();            this.isSelected.put(postiton, true);            notifyDataSetChanged();        }    }
//ListViewListView exchangeCenters = (ListView) findViewById(R.id.exchange_centers);        final MyAdapter myadapter = new MyAdapter(getData(),this);        exchangeCenters.setAdapter(myadapter);        exchangeCenters.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                myadapter.setIsSelected(position);                exchangeCenter = getData().get(position);            }        });

布局的注意事项
1.CheckBox自身的点击要关闭,添加属性android:clickable=”false”
2.item的总部局需要加android:descendantFocusability=”blocksDescendants”保证ListView点击事件正常
3.ListView属性加android:layout_weight=”1”保证不会覆盖下方的按钮

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android实现气泡布局/弹窗效果 气泡尖角方向及偏移量可控
  5. Android(安卓)自定义View (一)
  6. Android调用接口,获取并解析数据(json格式)
  7. Android(安卓)用HttpClient 以Post方式提交数据并添加http头信息
  8. Android实现文件选择
  9. Android(安卓)Studio 中Kotlinx开发

随机推荐

  1. Android控件隐藏方式 .
  2. Android历代版本的代号
  3. Android移动开发
  4. android Activity单元测试
  5. 在Android中扫描wifi热点演示实例教程
  6. 弹出sub View在当前窗口
  7. 2010.11.11———Android(安卓)TabHost选
  8. 【Android】两步搞定AndroidSDKManager在
  9. android:launchMode
  10. android sdk支持ant自动构建jar步骤