AlertDialog MultiChoiceItems监听器问题

时间:2009-10-28 23:29:37

标签: android android-1.5-cupcake

我目前正在使用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);”,一个是实际选择它。

这已经让我疯了几天了,任何帮助都会非常感激。

4 个答案:

答案 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);
        } 
     }
   }
  }
});