一、制作有单选item的ListView
主要有两点:
- 设置ListView 的选择模式为单选模式AbsListView.CHOICE_MODE_SINGLE
setChoiceMode(AbsListView.CHOICE_MODE_SINGLE) - 设置ListView 的item的显示view为android系统单选布局
android.R.layout.simple_list_item_single_choice
效果图
显示的数据源资源文件
<resources>
<string-array name="cities">
<item>武汉</item>
<item>北京</item>
<item>上海</item>
<item>成都</item>
<item>西安</item>
</string-array>
</resources>
ListView的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ChoiceActivity_12_09">
<ListView
android:id="@+id/listView_09"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
设置Adapter
ListView listView = (ListView) findViewById(R.id.listView_09);
listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.cities, android.R.layout.simple_list_item_single_choice);
listView.setAdapter(adapter);
取得选择的位置
int position= listView.getCheckedItemPosition();
二、制作有多选item的ListView
其实跟有单选item的ListView差不多
主要有两点:
- 设置ListView 的选择模式为多选模式AbsListView.CHOICE_MODE_MULTIPLE
setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE) - 设置ListView 的item的显示view为android系统多选布局
android.R.layout.simple_list_item_multiple_choice
效果图
java代码
ListView listView = (ListView) findViewById(R.id.listView_09);
listView.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.cities, android.R.layout.simple_list_item_multiple_choice);
listView.setAdapter(adapter);
取得checkBox选择的值
使用类SparseBooleanArray,是一个Map映射类,键为选择位置,值为是被选择的boolean值
第一种取得选择的值
String array[]=getResources().getStringArray(R.array.cities);
SparseBooleanArray checked=listView.getCheckedItemPositions();
String str="";
for(int i=0;i<array.length;i++){
if(checked.get(i)){//如果该位置的checkbox被选中
str+=array[i];
}}
第二种取得选择的值
String array[]=getResources().getStringArray(R.array.cities);
SparseBooleanArray checked=listView.getCheckedItemPositions();
for(int i=0;i<checked.size();i++){
boolean b =checked.valueAt(i);
if(b){
int pos=checked.keyAt(i);
str+=array[pos];
}
}