Android: FragmentTransaction ausblenden funktioniert nicht für DialogFragment
Ich versuche, fügen Sie ein
fragmentTransaction.hide(myDialogFragment);
fragmentTransaction.addToBackStack(null);
einer FragmentTransaction so, dass das Dialogfeld wird erneut angezeigt, wenn der Benutzer sich zuvor auf den zurück-button, aber es funktioniert nicht. Ich ursprünglich überschrieb onCreateDialog in meinem DialogFragment, aber ich bemerkte, dass die Unterlagen für die ausblenden Anruf auf FragmentTransaction Staaten:
Dies ist nur relevant für Fragmente, deren Ansichten wurden Hinzugefügt
container.
Anstatt also, jetzt bin ich überschreiben onCreateView. Jetzt ist es irgendwie versteckt, aber auch nicht wirklich. Der dialog lediglich zusammenschrumpft, aber das Fenster bleibt immer noch dunkel. Ich getroffen habe, um die zurück-Taste, um es loszuwerden, das ist nicht das Verhalten, das ich will, natürlich. Was vermisse ich hier?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen
DialogFragment
pflegt den dialog nach innen und Anrufe ein-und ausblenden Methoden auf es nach eigenen Lebenszyklus. AufrufFragmentTransaction.hide()
nur versucht, um die Sichtbarkeit des fragments ist der Ansicht, zurückgegeben durchFragment.onCreateView()
Anzuzeigen.GEGANGEN. Der Blick auf das DialogFragment ist zufälligerweise die Ansicht, die für die interne dialog, und so, was Sie tun ist ausblenden der Inhalte auf den dialog. Leider versteckt sich der Ansicht nicht 'entlassen' der dialog und damit der Bildschirm immer noch gedimmt werden.Beim Aufruf
DialogFragment.show(FragmentTransaction,String)
eineFragmentTransaction
erstellt wird, um es derFragmentManager
. Normalerweise zeigt der dialog wird als 'aktiv' mit der Transaktion und dann die Entlassung es ist nur knallen der back-stack die entsprechende Anzahl von Zeiten. Wenn Sie nicht fügen Sie alle anderen Fragmente in zwischen, dann eine neue FragmentTransaction erstellt mit einer remove-operation. Wenn wir könnten, auf diese zuzugreifen, dann könnten wir nur noch ein backstack Eintrag machen und dieser Vorgang reversibel. Leider ist dies nicht möglich, und so das beste, was wir tun können, ist nur, um unsere eigene entlassen Methode (und hoffen, dass der innere Zustand nicht zu sehr nach oben geschraubt):Klicken Sie auf die Schaltfläche, die in das fragment dazu, dass ein DialogFragment geöffnet werden, mit seinen eigenen schließen-button. Nach drücken der schließen können Sie den dialog wieder durch drücken der zurück-Taste, indem Sie die entfernen-operation. Dies erzeugt etwas fragwürdig Verhalten, wenn Sie erlauben der zurück-Taste sowohl ein-und ausblenden des dialogs, aber die details können von Ihnen entschieden werden nach Ihrer Anwendung.
Ich war in der Lage sich zu verstecken ein dialog von einem DialogFragment durch den Aufruf
getDialog().hide()
aus meiner DialogFragment.Wenn Sie
API Level 11
oder höher, können Sie einfach anrufendismiss()
auf dieDialogFragment
entweder ausFragmentActivity
oder ausDialogFragment
selbst.