7

我目前正在使用 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。)我应该使用单独的侦听器来检测用户何时单击这些? 在我看来,设置了两个复选标记,一个是“setItemChecked(0, true);”,一个是实际选择它。

这已经让我发疯了几天,任何帮助将不胜感激。

4

4 回答 4

8

哦!!!我忘记了它以确保取消选择您必须将检查更改为 null ;),我遇到了同样的问题。

    builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() {
...
于 2010-01-20T21:18:10.393 回答
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);
    }
}
于 2010-01-20T19:55:04.343 回答
1

不要认为您可以更改列表中的值,因为列表项(复选框)由构建器对象控制。但是,您可以简单地在单击第一个项目时重新启动对话框......通过关闭正在显示的对话框,然后创建一个新的......

于 2009-11-27T22:49:30.647 回答
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);
        } 
     }
   }
  }
});
于 2013-10-06T18:08:09.630 回答