在ListView中使用CheckedTextView如果只是简单的布局可以采用系统自带的android.R.layout.simple_list_item_multiple_choice配合SimpleAdapter就可以实现多选,不需要额外的编程,如下:
List<Map<String,Object>> mapList = new ArrayList<Map<String,Object>>();
HashMap<String,Object> map1 = new HashMap<String, Object>();
map1.put("title", "程序员");
mapList.add(map1);
HashMap<String,Object> map2 = new HashMap<String, Object>();
map2.put("title", "会计");
mapList.add(map2);
SimpleAdapter adapter = new SimpleAdapter(this,mapList,android.R.layout.simple_list_item_multiple_choice,
new String[]{"title"},new int[]{android.R.id.text1});
setListAdapter(adapter);
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
//getListView().getCheckedItemPositions() 可以获取选取的位置
如果需要自定义布局,则实现复选需要处理点击List中的Item事件,一般采用一个map记录当前位置项的选中状态在adapter中的getView方法设置CheckedTextView的选中状态。
private HashMap<Integer,Boolean> checkedMap;
public void onCreate(Bundle savedInstanceState) {
setListAdapter(new MyAdapter(mapList));
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterview, View view,
int i, long l) {
// TODO Auto-generated method stub
boolean checked = getListView().isItemChecked(i);
checkedMap.put(i,checked);
}
});
}
private class MyAdapter extends BaseAdapter{
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckedTextView contactName = (CheckedTextView)convertView.findViewById(R.id.text1);
if (checkedMap.get(position)!=null && checkedMap.get(position)==true) {
contactName.setChecked(true);
}
else{
contactName.setChecked(false);
}
return convertView;
}