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的完美結合/
始化數據
- 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