Ich habe eine Aktivität, mit einem Fragment ‚Liste‘ bekam, die auf der auf einer seiner Elemente klicken, wird selbst Fragment zu einem ‚Inhalt‘ ersetzen. 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 beharren.Wie Fragmentdaten nach Backstack Transaktionen bestehen?
Fakten:
- beiden Fragmente werden erzeugt durch
public static TheFragment newInstance(Bundle args)
,setArguments(args)
undBundle args = getArguments()
- beiden Fragmente auf dem gleiche Niveau sind, das ein
FrameLayout
von der übergeordneten Aktivität direkt innen ist (das heißt, nicht verschachtelt Fragmente) - ich will nicht
setRetainInstance
nennen, weil meine Tätigkeit eine Master/Detail-Fluss, das ein 2 Bereich Layout auf größeren Bildschirme hat. 7 "-Tabletts haben 1 Fenster im Hochformat und 2 Fenster im Querformat. Wenn ich die Fragmentinstanz 'list' behalte, wird es (denke ich) Dinge mit Bildschirmdrehungen verkomplizieren - wenn der Benutzer auf ein Element in der 'Liste' klickt Fragment, das ‚Inhalt‘ Fragment wird durch
FragmentTransaction#replace(int, Fragment, String)
angezeigt, mit der gleichen ID, aber einem anderen Tag - ich
onSaveInstanceState(Bundle)
hatte außer Kraft setzen, aber das ist nicht immer vom Framework aufgerufen, wie per the doc: „Es gibt viele Situationen, in denen Ein Fragment kann größtenteils abgerissen werden (z. B. wenn es auf dem Backstack platziert wird und keine Benutzeroberfläche angezeigt wird), aber sein Status wird nicht gespeichert, bis seine besitzende Aktivität seinen Status tatsächlich speichern muss. " - ich die Support-Bibliothek
Vom Punkt 5 oben mit, ich denke, dass Low-End-Geräte, die Speicher nach einem Fragment Transaktion wiederherstellen müssen Fragment#onSaveInstanceState(Bundle)
nennen. 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 Bündel ist immer null
.
Daher kann ich keinen Unterschied machen von einem brandneuen Fragment Start zu einem Back-Stack-Restore.
Hinweis: mögliche related/duplicate question
Im Moment habe ich nur die Option 'isFromBackStack = getActivity(). GetSupportFragmentManager(). GetBackStackEntryCount()> 0'. Ich hätte gerne etwas saubereres, das fühlt sich für mich wie ein Hack an. Außerdem erhalte ich kein "Bündel" von der vorherigen Fragmentinstanz. –