利用CheckedTextView在ListView中的实现多选

       在ListView中使用CheckedTextView如果只是简单的布局可以采用系统自带的android.R.layout.simple_list_item_multiple_choice配合SimpleAdapter就可以实现多选,不需要额外的编程,如下:
		List> mapList = new ArrayList>();
		
		HashMap map1 = new HashMap();
		
		map1.put("title", "程序员");
		mapList.add(map1);
		
		HashMap map2 = new HashMap();
		
		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 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;
}

你可能感兴趣的:(android,CheckTextView)