【Android】ListView相关——与CheckBox的完美结合


Android系统的设置菜单,是由一个大的ListView组成的,其中有不少cell中都包含CheckBox,比如无线网,飞行模式等。

如果想自己做一个类似的应用,就需要用到ListView的adapter了。

另外我们需要借助一下HashMap~

本文实现的功能是将ListView子项中的CheckBox与ListView分离出来,即点击ListView的子项实现的是查看ListView子项的内容,点击子项中的CheckBox来实现CheckBox的选中与否,我们这里做的ListView的监听是System.out出所点击的ListView的位置。

本文工程资源下载

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/Android源码集锦/2011年/12月/【Android】ListView相关——与CheckBox的完美结合/

始化数据

  1. data = new ArrayList<HashMap>();  
  2. for (int i = 0; i < 20; i++) {  
  3.     map = new HashMap();  
  4.     map.put("title""title-->" + i);  
  5.     map.put("content""content--" + i);  
  6.     data.add(map);  
  7. }  
设置ListView
  1. adapter = new MyAdapter(CheckList.this, data);  
  2. mListView.setAdapter(adapter);  
  3. // 为listview的子项添加点击事件,position就是原来的arg2   
  4. mListView.setOnItemClickListener(new OnItemClickListener() {  
  5.     @Override  
  6.     public void onItemClick(AdapterView<?> parent, View view,  
  7.             int position, long id) {  
  8.         System.out.println("您所点击的行号是:" + position);  
  9.     }  
  10. });  
定义我们需要的adapter
  1. int count = scroll_num;  
  2. Context mContext;  
  3. ArrayList<HashMap> mData;  
  4. LayoutInflater mInflater;  
  5.   
  6. public MyAdapter(Context context, ArrayList<HashMap> data) {  
  7.     this.mContext = context;  
  8.     this.mData = data;  
  9.     mInflater = (LayoutInflater) mContext  
  10.             .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);  
  11.     if (count > mData.size()) {  
  12.         count = mData.size();  
  13.     }  
  14.     isSelected = new HashMap<Integer, Boolean>();  
  15.     for (int i = 0; i < data.size(); i++) {  
  16.         isSelected.put(i, false);  
  17.     }  
  18. }  
  19.   
  20. @Override  
  21. public int getCount() {  
  22.     return mData.size();  
  23. }  
  24.   
  25. @Override  
  26. public Object getItem(int position) {  
  27.     return position;  
  28. }  
  29.   
  30. @Override  
  31. public long getItemId(int position) {  
  32.     return position;  
  33. }  
  34.   
  35. @Override  
  36. public View getView(final int position, View convertView,  
  37.         ViewGroup parent) {  
  38.     if (convertView == null) {  
  39.         convertView = mInflater.inflate(R.layout.item_listview, null);  
  40.         holder = new ViewHolder();  
  41.         holder.content = (TextView) convertView  
  42.                 .findViewById(R.id.item_listview_content);  
  43.         holder.checkBox = (CheckBox) convertView  
  44.                 .findViewById(R.id.item_listview_checkbox);  
  45.         convertView.setTag(holder);  
  46.     } else {  
  47.         holder = (ViewHolder) convertView.getTag();  
  48.     }  
  49.   
  50.     holder.content  
  51.             .setText(data.get(position).get("content").toString());  
  52.     holder.checkBox.setChecked(isSelected.get(position));  
  53.     holder.checkBox.setOnClickListener(new OnClickListener() {  
  54.         @Override  
  55.         public void onClick(View v) {  
  56.             if (isSelected.get(position)) {  
  57.                 isSelected.put(position, false);  
  58.             } else {  
  59.                 isSelected.put(position, true);  
  60.             }  
  61.             notifyDataSetChanged();  
  62.         }  
  63.     });  
  64.   
  65.     return convertView;  
  66. }  
最后再定义一个xml的adapter

相关内容