Die Dokumente sagen dies für die dismiss()
Methode aus der Dialog
Klasse:
Schließen Sie diesen Dialog und entfernen Sie ihn vom Bildschirm. Diese Methode kann sicher von jedem Thread aus aufgerufen werden. Beachten Sie, dass Sie diese Methode nicht überschreiben sollten, um eine Bereinigung durchzuführen, wenn der Dialog geschlossen wird, sondern diese in implementieren
onStop()
.
In meinem Code rufe ich nur getDialog().dismiss()
an, um ihn zu schließen. Aber ich mache nichts anderes oder benutze es gar nicht onStop()
. Ich frage also genau, wie man a korrekt DialogFragment
schließt, um Speicherlecks usw. zu vermeiden.
protected void showDialogFragment(final DialogFragment fragment) {final FragmentTransaction fTransaction = getSupportFragmentManager().beginTransaction(); fTransaction.addToBackStack(null); fragment.show(fTransaction, "dialog");}
Entschuldigung für den fiesen Einzeiler! Aber ja, Sie könnten Recht haben, also habe ich vorerst einen anderen Weg geschrieben, um meine DialogFragments zu schließen. Die Art und Weise, wie ich sie mit der Methode submit () entlassen habe, bestand darin, das Fragment nur nach Tag zu suchen und dann entlassen () auszuführen, wenn es nicht null war. Oh und ja, ich machenew
das Fragment kurz bevor ich es an diese Methode weitergebe.Ich denke, ein besserer Weg, um a zu schließen,
DialogFragment
ist folgender:Auf diese Weise müssen Sie keinen Verweis auf das halten
DialogFragment
und können ihn von überall aus schließen.quelle
Warum versuchen Sie nicht, nur diesen Code zu verwenden:
Wenn Sie das Dialogfragment selbst schließen möchten. Sie können diesen Code einfach in das Dialogfragment einfügen, in dem Sie den Dialog schließen möchten.
Beispielsweise:
Dadurch wird das zuletzt auf dem Bildschirm angezeigte Dialogfragment geschlossen.
Hoffe es hilft dir.
quelle
Ich habe Terels Antwort positiv bewertet. Ich wollte dies nur für alle Kotlin-Benutzer posten:
quelle
Kotlin Version von Terel Antwort
quelle
Sie sollten Sie entlassen
Dialog
inonPause()
so sie überschreiben.Auch vor dem Entlassen können Sie nach dem
null
folgenden Snippet suchen und es wird angezeigt:quelle
DialogFragment
von Google zeigt die verwendeteonPause()
Methode überhaupt nicht. Aber ich glaube ich sehe was du tust. Was ist der Punkt, wenn der Benutzer nicht anruftonPause()
. Dann weiß das System, dass das Fragment abgerufen wird. Was ist mit wann, sagen wir, ein Benutzer storniert. Was ist in diesem Fall ein besserer Weg, um es zu schließen?In anderen Antworten finden sich Verweise auf die offiziellen Dokumente ( DialogFragment Reference ), das dort angegebene Beispiel wird jedoch nicht erwähnt:
Für meine Bedürfnisse habe ich es geändert in:
quelle
Rufen Sie einfach entlassen () aus dem Fragment auf, das Sie schließen möchten.
quelle
Ich stellte fest, dass
<fragment>
das Dialogfragment mit demdismiss()
Befehl nicht geschlossen wurde, wenn mein Fragment im Navigationsdiagramm mit einem Tag definiert wurde (für ein Vollbild-Dialogfragment) . Stattdessen musste ich den Backstack platzen lassen:Wenn jedoch dasselbe Dialogfragment im Navigationsdiagramm mit einem
<dialog>
Tag definiert wurde,dismiss()
funktioniert dies einwandfrei .quelle
quelle
Wenn Sie zu den anderen Antworten hinzufügen , wird bei einem
DialogFragment
Vollbildaufrufdismiss()
das DialogFragment nicht aus dem Fragment-Backstack entfernt. Eine Problemumgehung besteht darin,onBackPressed()
die übergeordnete Aktivität aufzurufen .Etwas wie das:
CustomDialogFragment.kt
quelle