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就是原來的arg2mListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic 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);}}@Overridepublic int getCount() {return mData.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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() {@Overridepublic 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