歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

【Android】ListView相關——與CheckBox的完美結合

Android系統的設置菜單,是由一個大的ListView組成的,其中有不少cell中都包含CheckBox,比如無線網,飛行模式等。

如果想自己做一個類似的應用,就需要用到ListView的adapter了。

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

本文實現的功能是將ListView子項中的CheckBox與ListView分離出來,即點擊ListView的子項實現的是查看ListView子項的內容,點擊子項中的CheckBox來實現CheckBox的選中與否,我們這裡做的ListView的監聽是System.out出所點擊的ListView的位置。

本文工程資源下載

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.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
Copyright © Linux教程網 All Rights Reserved