40 votes

Pouvez-vous déclencher un événement lorsque Android Dialog est fermé ?

Disons que j'ai créé une boîte de dialogue dans mon application Android comme ceci :

 private static ProgressDialog dialog;
dialog = ProgressDialog.show(MainActivity.this, "", "Downloading Files. Please wait...", true);

Maintenant, est-il possible de déclencher un événement lorsque le suivant est appelé ?

 dialog.dismiss();

La raison pour laquelle je veux faire cela et pas seulement appeler ma méthode après dialog.dismiss(); est parce que le rejet de la boîte de dialogue est appelé dans une classe statique et la prochaine chose que je veux faire est de charger une nouvelle activité (ce qui ne peut pas être fait en utilisant des intentions dans une classe statique).

65voto

Aleadam Points 25433

Utilisez un OnDismissListener .

Il existe une setOnDismissListener(...) dans la classe Dialog

9voto

barmaley Points 7307

Bien sûr, vous pouvez vérifier :

   public void onDismiss(DialogInterface dialogInterface)
  {
        //Fire event
  }

6voto

Rahim Points 661

Chaque fois qu'une boîte de dialogue est fermée en cliquant sur PositiveButton, NegativeButton, NeturalButton ou en cliquant en dehors de la boîte de dialogue, "onDismiss" est toujours appelé automatiquement, alors faites votre travail dans la méthode onDismiss(), par exemple,

 @Override
public void onDismiss(DialogInterface dialogInterface) {
    ...
}

Vous n'avez même pas besoin d'appeler la méthode dismiss().

5voto

40-Love Points 1333

Utilisez la méthode setOnDismissListener pour la boîte de dialogue.

 dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
    @Override
    public void onDismiss(DialogInterface dialog) {
        if (mIsSettingsDirty)
            refreshRecyclerView();
    }
});

1voto

silverTech Points 41

Si vous êtes dans une classe de dialogue personnalisée, remplacez dismiss(). Je recommande d'insérer la logique AVANT super.dismiss(). Exemple de Kotlin :

 override fun dismiss() {
    Utils.hideKeyboard(mContext, window)
    super.dismiss()
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X