2009-10-28 106 views
6

我目前使用AlertDialog.builder为用户创建多选列表(复选框)。这很好,除了我们希望其中一个按钮取消选择列表中的所有其他按钮。AlertDialog MultiChoiceItems监听器问题

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

这一直驱使我疯了几天,现在任何帮助将不胜感激。

回答

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); 
    } 
} 
8

哦!我忘了它,以确保取消选择您必须更改选中为空;),我有同样的问题。

builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() { 
... 
+1

你为我节省了很多时间:)谢谢!我将所有项目设置为false,但似乎只有null是我需要的! – tereru 2015-02-20 17:34:08

0

如果你想设置为不被选中的复选框,并需要在呼叫的checkedItems阵列设置为setMultiChoiceItems(),你需要设置检查数组项以虚假为好。确保您选中的数组是最终的,以便您可以在侦听器中访问它。

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