我目前正在使用AlertDialog.builder为用户创建多选列表(复选框)。这很好用,除了我们想要其中一个按钮取消选择列表中的所有其他按钮。
builder.setMultiChoiceItems(list, checked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int item, boolean isChecked) {
if(item == ANY_ITEM_BUT_0)
{
((AlertDialog) dialog).getListView().setItemChecked(0, false);
}
}
});
当使用“true”时,它将成功检查该框,但是当使用false时它不会取消选中它(除非我手动将其手动设置为true。)是否有一个单独的监听器我应该用来检测何时a用户点击这些?在我看来,有两个复选标记设置,一个是“setItemChecked(0,true);”,一个是实际选择它。
这已经让我疯了几天了,任何帮助都会非常感激。
答案 0 :(得分:8)
OH !!!我忘了它以确保取消选择你必须将checked更改为null;),我有同样的问题。
builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() {
...
答案 1 :(得分:3)
要取消选择其他项目,它可以正常工作::
if(item == ANY_ITEM_BUT_0){
for(int i=0; i<items.length;i++){
if (item != ANY_ITEM_BUT_0)
((AlertDialog)dialog).getListView().setItemChecked(i, false);
}
}
答案 2 :(得分:1)
不要认为您可以更改列表中的值,因为list-items(复选框)由builder-object控制。但是,您可以简单地在单击第一个项目时重新启动对话框...通过关闭正在显示的对话框,然后创建一个新对象....
答案 3 :(得分:0)
如果要设置一个未选中的复选框,并且需要在调用checkedItems
时设置setMultiChoiceItems()
数组,则还需要将选中的数组项设置为false。确保已检查的数组是最终的,以便您可以在侦听器中访问它。
builder.setMultiChoiceItems(list, checked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int item, boolean isChecked) {
if(isChecked && item == ANY_ITEM_BUT_0)
{
for(int i=0; i<list.length;i++){
if (i != ANY_ITEM_BUT_0) {
checked[i] = false;
((AlertDialog)dialog).getListView().setItemChecked(i, false);
}
}
}
}
});