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

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

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

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



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



初始化數據

		data = new ArrayList<HashMap>();
		for (int i = 0; i < 20; i++) {
			map = new HashMap();
			map.put("title", "title-->" + i);
			map.put("content", "content--" + i);
			data.add(map);
		}
	

設置ListView

		adapter = new MyAdapter(CheckList.this, data);
		mListView.setAdapter(adapter);
		// 爲listview的子項添加點擊事件,position就是原來的arg2
		mListView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				System.out.println("您所點擊的行號是:" + position);
			}
		});
	

定義我們需要的adapter

		int count = scroll_num;
		Context mContext;
		ArrayList<HashMap> mData;
		LayoutInflater mInflater;

		public MyAdapter(Context context, ArrayList<HashMap> data) {
			this.mContext = context;
			this.mData = data;
			mInflater = (LayoutInflater) mContext
					.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
			if (count > mData.size()) {
				count = mData.size();
			}
			isSelected = new HashMap<Integer, Boolean>();
			for (int i = 0; i < data.size(); i++) {
				isSelected.put(i, false);
			}
		}

		@Override
		public int getCount() {
			return mData.size();
		}

		@Override
		public Object getItem(int position) {
			return position;
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(final int position, View convertView,
				ViewGroup parent) {
			if (convertView == null) {
				convertView = mInflater.inflate(R.layout.item_listview, null);
				holder = new ViewHolder();
				holder.content = (TextView) convertView
						.findViewById(R.id.item_listview_content);
				holder.checkBox = (CheckBox) convertView
						.findViewById(R.id.item_listview_checkbox);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			holder.content
					.setText(data.get(position).get("content").toString());
			holder.checkBox.setChecked(isSelected.get(position));
			holder.checkBox.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					if (isSelected.get(position)) {
						isSelected.put(position, false);
					} else {
						isSelected.put(position, true);
					}
					notifyDataSetChanged();
				}
			});

			return convertView;
		}
	

最後再定義一個xml的adapter


工程資源:http://download.csdn.net/detail/etzmico/3780822

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章