歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 【Android】ListView相關——與CheckBox的完美結合

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

日期:2017/3/1 10:47:55   编辑:Linux編程

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. public MyAdapter(Context context, ArrayList<HashMap> data) {
  6. this.mContext = context;
  7. this.mData = data;
  8. mInflater = (LayoutInflater) mContext
  9. .getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
  10. if (count > mData.size()) {
  11. count = mData.size();
  12. }
  13. isSelected = new HashMap<Integer, Boolean>();
  14. for (int i = 0; i < data.size(); i++) {
  15. isSelected.put(i, false);
  16. }
  17. }
  18. @Override
  19. public int getCount() {
  20. return mData.size();
  21. }
  22. @Override
  23. public Object getItem(int position) {
  24. return position;
  25. }
  26. @Override
  27. public long getItemId(int position) {
  28. return position;
  29. }
  30. @Override
  31. public View getView(final int position, View convertView,
  32. ViewGroup parent) {
  33. if (convertView == null) {
  34. convertView = mInflater.inflate(R.layout.item_listview, null);
  35. holder = new ViewHolder();
  36. holder.content = (TextView) convertView
  37. .findViewById(R.id.item_listview_content);
  38. holder.checkBox = (CheckBox) convertView
  39. .findViewById(R.id.item_listview_checkbox);
  40. convertView.setTag(holder);
  41. } else {
  42. holder = (ViewHolder) convertView.getTag();
  43. }
  44. holder.content
  45. .setText(data.get(position).get("content").toString());
  46. holder.checkBox.setChecked(isSelected.get(position));
  47. holder.checkBox.setOnClickListener(new OnClickListener() {
  48. @Override
  49. public void onClick(View v) {
  50. if (isSelected.get(position)) {
  51. isSelected.put(position, false);
  52. } else {
  53. isSelected.put(position, true);
  54. }
  55. notifyDataSetChanged();
  56. }
  57. });
  58. return convertView;
  59. }
最後再定義一個xml的adapter
Copyright © Linux教程網 All Rights Reserved