La documentation dit ceci pour la dismiss()
méthode de la Dialog
classe:
Fermez cette boîte de dialogue et supprimez-la de l'écran. Cette méthode peut être appelée en toute sécurité depuis n'importe quel thread. Notez que vous ne devez pas remplacer cette méthode pour effectuer le nettoyage lorsque la boîte de dialogue est fermée, mais implémentez-la dans
onStop()
.
Dans mon code, tout ce que je fais est d'appeler getDialog().dismiss()
pour le rejeter. Mais je ne fais rien d'autre ni même n'utilise onStop()
. Je demande donc exactement comment écarter correctement un DialogFragment
pour éviter toute fuite de mémoire, etc.
protected void showDialogFragment(final DialogFragment fragment) {final FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); fTransaction.addToBackStack(null); fragment.show(fTransaction, "dialog");}
Désolé pour la vilaine doublure! Mais oui, vous pourriez avoir raison, donc pour le moment, j'ai écrit une autre façon de fermer mes DialogFragments. La façon dont je les rejetais à l'aide de la méthode rejet () consistait simplement à trouver le fragment par balise, puis à exécuter rejeter () dessus s'il n'était pas nul. Oh et oui, je suisnew
le fragment juste avant de le passer à cette méthode.Je pense qu'une meilleure façon de fermer un
DialogFragment
est la suivante:De cette façon, vous n'avez pas à tenir une référence au
DialogFragment
et pouvez le fermer de partout.la source
Pourquoi n'essayez-vous pas d'utiliser uniquement ce code:
Si vous souhaitez supprimer le fragment de dialogue par lui-même. Vous pouvez simplement placer ce code dans le fragment de boîte de dialogue où vous souhaitez fermer la boîte de dialogue.
Par exemple:
Cela fermera le fragment de dialogue récent affiché à l'écran.
J'espère que cela vous aidera.
la source
J'ai donné un vote favorable à la réponse de Terel. Je voulais juste publier ceci pour tous les utilisateurs de Kotlin:
la source
Version Kotlin de la réponse Terel
la source
Vous devriez vous rejeter
Dialog
dansonPause()
remplacer il.Aussi avant de rejeter, vous pouvez vérifier
null
et s'affiche comme ci-dessous l'extrait de code:la source
DialogFragment
par google ne montre pas du tout laonPause()
méthode utilisée. Mais je pense que je vois ce que vous faites. Quel est le point si l'utilisateur n'appelle pasonPause()
. C'est quand le système sait que le fragment est appelé. Et quand, par exemple, un utilisateur annule. Quelle est la meilleure façon de le fermer dans ce cas?Il y a des références aux documents officiels ( DialogFragment Reference ) dans d'autres réponses, mais aucune mention de l'exemple qui y est donné:
Pour mes besoins, je l'ai changé en:
la source
En ajoutant aux autres réponses, lorsque vous avez un
DialogFragment
appel en plein écran,dismiss()
le DialogFragment ne sort pas de la pile de fragments. Une solution de contournement consiste à appeleronBackPressed()
l'activité parent.Quelque chose comme ça:
CustomDialogFragment.kt
la source
Appelez simplement la fonction de renvoi () à partir du fragment que vous souhaitez supprimer.
la source
J'ai trouvé que lorsque mon fragment était défini dans le graphique de navigation avec une
<fragment>
balise (pour un fragment de dialogue en plein écran), le fragment de dialogue ne disparaissait pas avec ladismiss()
commande. Au lieu de cela, j'ai dû faire apparaître la pile arrière:Cependant, si le même fragment de dialogue a été défini dans le graphique de navigation avec une
<dialog>
balise,dismiss()
fonctionne correctement.la source
la source