首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

安卓ListView中CheckBox的运用(支持Item列表项的删除,全选,全不选)

2012-06-28 
安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)ListView 自身提供了 CheckBox 只需要添

安卓ListView中CheckBox的使用(支持Item列表项的删除,全选,全不选)

ListView 自身提供了 CheckBox 只需要添加一行代码

getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

但是这种实现想要自己控制操作起来局限很多。所以我选择了自己添加CheckBox的方式。可以支持列表项的全选,删除,并保持数据的对应关系不会乱。

?

列表中的CheckBox选中状态与一个Map进行绑定,利用?adapter.notifyDataSetChanged();来更新界面。

效果如下:


安卓ListView中CheckBox的运用(支持Item列表项的删除,全选,全不选)

下面直接看代码把。

?

main.xml

?

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#C9F1FF">    <ListView        android:id="@id/android:list"        android:layout_height="wrap_content"        android:layout_width="fill_parent"        android:fadingEdge="none"android:cacheColorHint="#00000000"/>    <RelativeLayout         android:layout_width="fill_parent"         android:layout_height="40.0dip"         android:layout_alignParentBottom="true"><CheckBox android:id="@+id/all_check_btn"     android:layout_width="40.0dip"     android:background="@drawable/bottom_back_bg"android:layout_height="40.0dip"  android:layout_alignParentLeft="true"/></RelativeLayout></RelativeLayout>
?

item.xml

?

<?xml version="1.0" encoding="utf-8"?>    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"          android:layout_width="fill_parent" android:layout_height="wrap_content"          android:layout_marginRight="3.0dip" android:layout_weight="1.0"        android:orientation="horizontal" android:descendantFocusability="blocksDescendants">         <CheckBox android:id="@+id/isCheakBox" android:layout_width="wrap_content" android:layout_height="wrap_content"             android:layout_alignParentLeft="true" />        <!-- 日报图片 -->          <ImageView android:id="@+id/dailyPic" android:contentDescription="dailyPic"            android:layout_width="wrap_content" android:layout_height="wrap_content"              android:layout_marginTop="3.0dip" android:src="@drawable/reports"              android:layout_toRightOf="@id/isCheakBox" android:layout_centerVertical="true"/>         <!--附件名称 -->          <TextView            android:id="@+id/dailyName"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_toRightOf="@id/dailyPic"            android:text="日报名称" android:layout_centerVertical="true"            android:textColor="#000000"            android:textSize="12.0sp" />         <ImageButton android:id="@+id/deleteAttachment"              android:layout_width="wrap_content" android:layout_height="wrap_content"              android:layout_marginTop="3.0dip" android:background="@drawable/delete"              android:layout_centerVertical="true" android:focusable="false"             android:layout_alignParentRight="true" android:layout_marginRight="20dp"/>         <!--附件名称 -->      </RelativeLayout>  
?

? Activity代码

?

public class ListViewCheckBoxActivity extends ListActivity {    private static final String TAG = "ListViewCheckBoxActivity";        private List<Item> itemList;    private DraftDailyAdapter adapter;    private Map<Integer, Boolean> isCheckedMap;    private CheckBox allCheckBox;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        allCheckBox = (CheckBox)findViewById(R.id.all_check_btn);        itemList = new ArrayList<Item>();        isCheckedMap = new HashMap<Integer, Boolean>();        //初始化数据        for(int i=0;i<8;i++){            Item item = new Item();            item.id=i;            item.name = "第"+i+"篇日报";            itemList.add(item);            isCheckedMap.put(i,false);        }                adapter = new DraftDailyAdapter(this,itemList);        setListAdapter(adapter);        allCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){             @Override             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                 Set<Integer> set = isCheckedMap.keySet();                Iterator<Integer> iterator = set.iterator();                  if(isChecked){                     while(iterator.hasNext()){                           Integer keyId = iterator.next();                           isCheckedMap.put(keyId,true);                    }                   }else{                     while(iterator.hasNext()){                           Integer keyId = iterator.next();                          isCheckedMap.put(keyId,false);                    }                  }                adapter.notifyDataSetChanged();            }         });     }            class DraftDailyAdapter extends BaseAdapter {        public List<Item> list;        private Context context;        LayoutInflater inflater;        public DraftDailyAdapter(Context context, List<Item> list) {            super();            this.list = list;            this.context = context;            inflater = LayoutInflater.from(this.context);        }        @Override        public int getCount() {            return list == null ? 0 : list.size();        }        @Override        public Object getItem(int location) {            return list.get(location);        }        @Override        public long getItemId(int position) {            return position;        }        @Override          public View getView(int position, View convertView, ViewGroup parent) {              ViewHolder holder = null;                Item item = list.get(position);            //Item的位置            final int listPosition = position;            //这个记录item的id用于操作isCheckedMap来更新CheckBox的状态            final int id = item.id;            if(convertView == null){                holder = new ViewHolder();                convertView = inflater.inflate(R.layout.item, null);                  holder.tvName = (TextView)convertView.findViewById(R.id.dailyName);                  holder.deleteButton = (ImageButton)convertView.findViewById(R.id.deleteAttachment);                holder.cBox = (CheckBox)convertView.findViewById(R.id.isCheakBox);                convertView.setTag(holder);            }else{                holder = (ViewHolder) convertView.getTag();            }            Log.d(TAG, "id="+id);            holder.cBox.setChecked(isCheckedMap.get(id));            holder.tvName.setText(item.name);             holder.deleteButton.setOnClickListener(new OnClickListener() {                @Override                public void onClick(View paramView) {                    //Log.d(TAG, "deletePosition="+listPosition+"");                    //删除list中的数据                    list.remove(listPosition);                    //删除Map中对应选中状态数据                    isCheckedMap.remove(id);                    //通知列表数据修改                    adapter.notifyDataSetChanged();                }            });            holder.cBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){                 @Override                 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                     if(isChecked){                         isCheckedMap.put(id,true);                    }else{                         isCheckedMap.put(id,false);                    }                }             });             return convertView;          }        public final class ViewHolder {                public TextView tvName;                public ImageButton deleteButton;                public CheckBox cBox;            }        }    class Item {        private Integer id;        private String name;    }    }

?

资源文件见附件源代码。

?

热点排行