Ich habe eine Aktivität, die die "Liste" des Fragments enthält, die sich beim Klicken auf eines ihrer Elemente durch ein "Inhaltsfragment" ersetzt. Wenn der Benutzer die Zurück-Schaltfläche verwendet, wird er erneut zum Fragment "Liste" gebracht.
Das Problem ist, dass das Fragment in seinem Standardzustand ist, egal was ich versuche, Daten zu erhalten.
Fakten:
public static TheFragment newInstance(Bundle args)
, setArguments(args)
und Bundle args = getArguments()
erstellt
FrameLayout
von der übergeordneten Aktivität befindet (also keine verschachtelten Fragmente) setRetainInstance
nicht aufrufen, weil meine Aktivität ein Master / Detail-Flow ist, der auf größeren Bildschirmen ein 2-Fenster-Layout hat. 7 "-Tabletts haben 1 Fenster im Hochformat und 2 Fenster im Querformat. Wenn ich die Fragmentinstanz 'list' behalte, wird es (glaube ich) Dinge mit Bildschirmdrehungen durcheinanderbringen FragmentTransaction#replace(int, Fragment, String)
mit derselben ID, aber einem anderen Tag onSaveInstanceState(Bundle)
überschrieben, aber das ist nicht immer , das vom Framework aufgerufen wird, wie nach dem Dokument : " Es gibt viele Situationen, in denen ein Fragment größtenteils abgerissen wird (z. B. wenn es auf dem Backstack platziert wird und keine Benutzeroberfläche angezeigt wird) ), aber sein Zustand wird nicht gespeichert, bis seine besitzende Aktivität seinen Zustand tatsächlich speichern muss. "
Aus dem obigen Punkt 5 geht hervor, dass Low-End-Geräte, die nach einer Fragmenttransaktion Speicher wiederherstellen müssen, Fragment#onSaveInstanceState(Bundle)
aufrufen. Auf meinen Testgeräten (Galaxy Nexus und Nexus 7) ruft das Framework diese Methode jedoch nicht auf. Das ist also keine gültige Option.
Also, wie kann ich einige Fragmentdaten behalten? Das an Fragment#onCreate
, Fragment#onActivityCreated
usw. übergebene Paket ist immer null
.
Daher kann ich keinen Unterschied zwischen einem brandneuen Start eines Fragments und einer Wiederherstellung im Backstack machen.
Hinweis: Möglich verwandte / doppelte Frage
Das scheint nicht richtig zu sein, aber hier habe ich es so gemacht:
%Vor%Und im Hauptfragment:
%Vor%Es funktioniert!
onDestroyView
gespeicherten Parameter.
onSaveInstanceState
wiederhergestellt.
setArguments
Alle Ereignisse werden abgedeckt und die neuesten Informationen werden immer gespeichert.
Es ist eigentlich komplizierter, es ist interface
-based, der Listener ist von / co_de% / onAttach
un / registriert. Aber die Prinzipien sind die gleichen.
Tags und Links android android-fragments back-stack