2009-12-17 9 views
4

J'essaie d'utiliser une boîte de dialogue gérée.Bonne façon de fermer une boîte de dialogue

J'ai remarqué qu'après la première fois que je l'ai affichée, les créations suivantes ne créent pas réellement une nouvelle instance du dialogue, elles semblent simplement réutiliser le premier.

Si je veux arrêter cela, et d'obtenir une nouvelle marque instance à chaque appel, est-ce la bonne façon de le faire ?:

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
     case MY_DIALOG_ID: 
      MyDlg dlg = new MyDlg(this); 
      dlg.setOnDismissListener(new OnDismissListener() { 
       public void onDismiss(DialogInterface dialog) { 
        removeDialog(MY_DIALOG_ID); 
       } 
      }); 
      return dlg; 
    } 
    return null; 
} 

donc je suppose que l'appel removeDialog() fait l'affaire, mais mon onDismiss() handler doit être appelé dans chaque instance de la boîte de dialogue étant tué, à droite (comme Dialog.cancel(), Dialog.dismiss(), en appuyant sur la touche de retour)?

Répondre

3

Comme vous l'avez remarqué, la méthode onCreateDialog() n'est appelée que la toute première fois que vous affichez la boîte de dialogue. Il est responsable de la construction du dialogue. La vérité est que vous n'avez pas à "détruire" votre dialogue pour forcer onCreateDialog à être appelé chaque fois que vous voulez montrer votre dialogue. Vous pouvez remplacer onPrepareDialog (int, Dialog) - celui-ci est appelé juste avant que le dialogue ne soit affiché. (Il peut recycler la boîte de dialogue construite lors de l'appel précédent onCreateDialog) "Définissez cette méthode si vous souhaitez modifier les propriétés de la boîte de dialogue chaque fois qu'elle est ouverte."
Cordialement!

Questions connexes