2010-11-06 16 views
1

J'ai une boîte de dialogue qui affiche une liste de cases à cocher. L'info dont les cases doivent être vérifiées à chaque ouverture provient d'un edittext. J'ai cherché un moyen de ne pas autoriser la mise en cache de la boîte de dialogue mais je n'ai pas pu trouver comment faire cela. Maintenant, je redéfinis onPrepareDialog pour définir les cases à cocher avant que la boîte de dialogue s'ouvre. J'ai supprimé le contenu de mon edittext, ouvert le dialogue et il y avait toujours les mêmes cases à cocher ... quelqu'un peut-il me dire comment réinitialiser les cases à cocher?Impossible de définir l'état de la case à cocher dans onPrepareDialog

@Override 
    protected void onPrepareDialog(int id, Dialog dialog) { 
     ListView lv = ((AlertDialog) dialog).getListView(); 

     if (lv == null) 
      return; 

     boolean[] checked = cbDialog.setAndGetCheckedArray(); 

     String s = "onPrepareDialog... checked="; 
     for (int i=0; i<checked.length; i++) 
      s+="["+i+"="+checked[i]+"]"; 
     System.out.println(s); 

      // if edittext is empty, all entries in checked[] are false here, 
      // but these changes do NOT affect the checkboxes in the dialog: 
     for (int i=0; i<checked.length; i++) 
      if (checked[i]) 
       lv.setItemChecked(i, true); 
      else 
       lv.setItemChecked(i, false); 
    } 

Répondre

1

Eh bien, j'ai finalement trouvé comment résoudre ce problème, peut-être il peut aider quelqu'un:

J'ai trouvé que (à cause du mécanisme de mise en cache interne), il peut être préférable de ne pas appeler showDialog() dans l'activité et utilise onCreateDialog() pour créer une boîte de dialogue, si le contenu de la boîte de dialogue est modifié dynamiquement. Au lieu de cela, j'ai créé une classe qui étend AlertDialog.Builder. J'ai implémenté une méthode comme "showCustomDialog()" où j'appelle .setTitle ..., .setMultiChoiceItems(), et enfin show(). Cette méthode de mon AlertDialog.Builder personnalisé je peux utiliser dans mon activité et tout fonctionne comme prévu;)

1

Il semble qu'il y ait un consensus général que les dialogues gérés ('showDialog', 'onCreateDialog' etc.) doivent être évités si le contenu doit être modifié pour différentes instances. En particulier, 'onPrepareDialog' dans le formulaire avant ou après l'API Niveau 1.8 ne sert à rien. Un autre exemple est: Question 954726