AlertDialog的多选样式列表在单选的基础上可以多选,使用了 CheckBox来多选
案例
R.array.hobby字符串资源文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="hobby">
<item>吃饭</item>
<item>上网</item>
<item>睡觉</item>
<item>LOL</item>
</string-array>
</resources>
java文件 这里基本上需要考虑下标使用集合管理的问题
public class MainActivity extends AppCompatActivity {
TextView t1;
String[] hobby;
AlertDialog alertDialog;
//多选选择事件
DialogInterface.OnMultiChoiceClickListener onMultiChoiceClickListener;
//dialog按钮事件
DialogInterface.OnClickListener onClickListener;
//选择的对象的下标
ArrayList<Integer> arrayListSelectIndex;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t1=(TextView)findViewById(R.id.t1);
//实例化选中对象的小标集合
arrayListSelectIndex=new ArrayList();
//获取字符串数组资源
hobby=getResources().getStringArray(R.array.hobby);
//多选事件
onMultiChoiceClickListener=new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if(isChecked)
{
//如果选中就添加下标
arrayListSelectIndex.add(which);
}
else
{
//如果没有选中就移除下标
//注意移除的时候,如果是int型数据,一定要注意转换成Integer,否则集合会认为是自己的下标
arrayListSelectIndex.remove(Integer.valueOf(which));
}
}
};
//dialog按钮事件
onClickListener=new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which==AlertDialog.BUTTON_POSITIVE)
{
//为了保持数组下标的顺序,这里需要集合排序
Collections.sort(arrayListSelectIndex);
//输出集合
StringBuffer stringBuffer=new StringBuffer();
for (int i=0;i<arrayListSelectIndex.size();i++)
{
stringBuffer.append(hobby[arrayListSelectIndex.get(i)]);
stringBuffer.append("\r\n");
}
t1.setText(stringBuffer.toString());
}
if(which==AlertDialog.BUTTON_NEGATIVE)
{
dialog.dismiss();
}
}
};
}
public void btn1(View view)
{
AlertDialog.Builder builder=new AlertDialog.Builder(this);
builder.setTitle("多选内容");
//设置一个选中的数组
boolean[] checkItem= new boolean[]{false, false, false, false};
//从以前选中的下标集合,设置选中数组,那个下标需要选中
for (int i=0;i<arrayListSelectIndex.size();i++)
{
checkItem[arrayListSelectIndex.get(i)]=true;
}
//设置多选数组和事件
//参数1:items 依赖的字符串数组
//参数2:checkedItems 默认选项,数据类型为boolean[],主要这个参数的个数需要和依赖的字符串数组的个数相匹配
//参数3:listener 事件 数据类型为onMultiChoiceClickListener
builder.setMultiChoiceItems(hobby, checkItem, onMultiChoiceClickListener);
builder.setPositiveButton("确定", onClickListener);
builder.setNegativeButton("返回", onClickListener);
alertDialog=builder.create();
alertDialog.show();
}
}
第一次打开AlertDialog
然后选中吃饭、上网
然后确定按钮
第二次打开AlertDialog
然后选中LoL和吃饭
然后确定按钮