利用CheckedTextView在ListView中的实现多选

       在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;
}
发布了38 篇原创文章 · 获赞 4 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/tomatozq/article/details/7214041