ListView用系统布局实现单选RadioButton和多选CheckBox

一、制作有单选item的ListView

主要有两点:

  • 设置ListView 的选择模式为单选模式AbsListView.CHOICE_MODE_SINGLE
    setChoiceMode(AbsListView.CHOICE_MODE_SINGLE)
  • 设置ListView 的item的显示view为android系统单选布局
    android.R.layout.simple_list_item_single_choice
效果图
ListView单选.png
显示的数据源资源文件
<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
效果图
ListView多选框.png
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];
            }
        }

推荐阅读更多精彩内容