checkbox 在ListView中使用 3
前面两篇文章介绍了CheckBox在ListView里的使用,现在讨论另一种方式在ListView中使用CheckBox。就是包装数据的方式:
首先定义一个ListView的布局文件:
<ListView android:id="@+id/list_view" android:layout_height="fill_parent" android:layout_width="fill_parent" android:cacheColorHint="@color/none" />然后就是一个Adapter,这里还是使用BaseAdapter的子类。在getView里的public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView) {final LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); contentView = inflater.inflate(R.layout.contactitem, null);else { itemView = (BeanItemView) convertView; }(BeanItemView)就不给出了,前面那段可以使用之前的,Holder,这里的(BeanItemView)是我自定义一个类。这些都与前面的类似,然后是:final Bean bean = mList.get(position);这个Bean是自己定义的一个内部类:private static class Bean { String name; 这里暂时因为简单处理,用一个字符串,包装一个数据,比如可以是另一个Bean,这样原来的数据就不会有修改的麻烦了。 boolean chk; 标明是否选中, boolean visible; 可以让CheckBox是否可见。 }然后定义这里的itemView.button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { bean.chk = !bean.chk; 添加后,点击CheckBox才会生效。 } });itemView.textView.setText(bean.name);itemView.button.setChecked(bean.chk);设置是否CheckBox可见:if (bean.visible == false) { itemView.button.setVisibility(View.INVISIBLE); } else { itemView.button.setVisibility(View.VISIBLE); }getView就结束了。数据就是private List<Bean> mList = new ArrayList<Bean>(20);private CheckAdapter mAdapter;private ListView listView;因为数据里已经包含了这个CheckBox是否选中,所以处理就比较简单了,如果全选 就把mList里的chk全置为true就可以了。item的布局:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/txt" android:textSize="18dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:gravity="center"/> <CheckBox android:id="@+id/btn" android:text="btn" android:layout_width="70dip" android:layout_height="wrap_content" android:focusable="false" android:layout_alignParentRight="true"/></RelativeLayout>这时只需一个CheckBox就可以用了。当然如果是这样,只有点击这个CheckBox时它才会选中,如果是前面那种方法,点击ListView里的一行任何地方都会有选中与取消。图片下次再传了。