【Android】ListView相关——与CheckBox的完美结合
【Android】ListView相关——与CheckBox的完美结合
Android系统的设置菜单,是由一个大的ListView组成的,其中有不少cell中都包含CheckBox,比如无线网,飞行模式等。
如果想自己做一个类似的应用,就需要用到ListView的adapter了。
另外我们需要借助一下HashMap~
本文实现的功能是将ListView子项中的CheckBox与ListView分离出来,即点击ListView的子项实现的是查看ListView子项的内容,点击子项中的CheckBox来实现CheckBox的选中与否,我们这里做的ListView的监听是System.out出所点击的ListView的位置。
本文工程资源下载:
免费下载地址在 http://linux.bkjia.com/
用户名与密码都是www.bkjia.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);
- }
- 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);
- }
- });
- 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;
- }
评论暂时关闭