2009-10-28 7 views
6

Ich verwende derzeit den AlertDialog.builder, um eine Multichoice-Liste für den Benutzer (Kontrollkästchen) zu erstellen. Das funktioniert großartig, außer dass wir eine der Schaltflächen deaktivieren möchten, um alle anderen in der Liste abzuwählen.AlertDialog MultiChoiceItems Listener Probleme

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

    } 
    } 
    }); 

Bei der Verwendung von „true“ wird es erfolgreich das Kontrollkästchen, aber wenn falsch verwendet es nicht deaktivieren Sie es nicht (es sei denn, ich manuell auf true, bevor die Hand gesetzt haben.) Gibt es einen separaten Hörer ich verwenden sollte zu erkennen, wenn ein Benutzer auf diese klickt? Es scheint mir, dass zwei Häkchen gesetzt sind, eins nach "setItemChecked (0, true);" und eins nach der Auswahl.

Das hat mich seit ein paar Tagen verrückt, jede Hilfe würde sehr geschätzt werden.

Antwort

1

Sie sind nicht der Ansicht, dass Sie die Werte in der Liste ändern können, da die Listenelemente (Kontrollkästchen) vom Builder-Objekt gesteuert werden. Sie können jedoch einfach den Dialog neu initiieren, wenn auf das erste Element geklickt wird, indem Sie das angezeigte Dialogfeld schließen und ein neues erstellen ....

3

Um die anderen Elemente abzuwählen, funktioniert es einwandfrei: :

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

OH !!! Ich vergesse es, um sicherzustellen, dass die Auswahl aufgehoben wird. Sie müssen das Kontrollkästchen auf null setzen;), ich hatte das gleiche Problem.

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

Sie haben mich eine Menge Zeit gerettet :) Danke! Ich habe alle Elemente mit false gesetzt, aber es scheint, dass null alles ist, was ich brauche! – tereru

0

Wenn Sie ein Kontrollkästchen festlegen möchten nicht überprüft werden, und Sie müssen die checkedItems Array auf den Anruf zu setMultiChoiceItems() setzen, müssen Sie auch die überprüften Array-Elemente auf false gesetzt. Stellen Sie sicher, dass das überprüfte Array endgültig ist, damit Sie im Listener darauf zugreifen können.

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