Android 带checkbox的listView 实现多选,全选,反选
Demo地址(0分资源):http://download.csdn.net/detail/onlyonecoder/5154352
由于listview的一些特性,刚开始写这种需求的功能的时候都会碰到一些问题,重点就是存储每个checkbox的状态值,在这里分享出了完美解决方法:
布局文件:
package com.notice.listcheck;import java.util.ArrayList;import java.util.HashMap;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.CheckBox;import android.widget.TextView;public class MyAdapter extends BaseAdapter {// 填充数据的listprivate ArrayList<String> list;// 用来控制CheckBox的选中状况private static HashMap<Integer, Boolean> isSelected;// 上下文private Context context;// 用来导入布局private LayoutInflater inflater = null;// 构造器public MyAdapter(ArrayList<String> list, Context context) {this.context = context;this.list = list;inflater = LayoutInflater.from(context);isSelected = new HashMap<Integer, Boolean>();// 初始化数据initDate();}// 初始化isSelected的数据private void initDate() {for (int i = 0; i < list.size(); i++) {getIsSelected().put(i, false);}}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {// 获得ViewHolder对象holder = new ViewHolder();// 导入布局并赋值给convertviewconvertView = inflater.inflate(R.layout.listviewitem, null);holder.tv = (TextView) convertView.findViewById(R.id.item_tv);holder.cb = (CheckBox) convertView.findViewById(R.id.item_cb);// 为view设置标签convertView.setTag(holder);} else {// 取出holderholder = (ViewHolder) convertView.getTag();}// 设置list中TextView的显示holder.tv.setText(list.get(position));// 根据isSelected来设置checkbox的选中状况holder.cb.setChecked(getIsSelected().get(position));return convertView;}public static HashMap<Integer, Boolean> getIsSelected() {return isSelected;}public static void setIsSelected(HashMap<Integer, Boolean> isSelected) {MyAdapter.isSelected = isSelected;}public static class ViewHolder {TextView tv;CheckBox cb;}}