2009-10-28 136 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); 
     } 
    } 
    } 
    } 
});