Wie beibehalten fragment-Daten nach dem backstack Transaktionen?

Ich habe eine activity mit fragment 'Liste', die bei Klick auf eines seiner Elemente ersetzen wird selbst zu einer 'content' - fragment. Wenn der Benutzer die Schaltfläche zurück, er brachte auf die 'Liste' - fragment wieder.

Das problem ist, dass das fragment ist in seiner Standard-Zustand, egal was ich versuche, um die Persistenz der Daten.

Fakten:

  1. beide Fragmente entstehen durch public static TheFragment newInstance(Bundle args), setArguments(args) und Bundle args = getArguments()
  2. beide Fragmente sind auf dem gleichen Niveau, die direkt in einer FrameLayout von der übergeordneten Aktivität (das heißt, nicht verschachtelten Fragmente)
  3. Ich nicht nennen will setRetainInstance, denn meine Tätigkeit ist eine master/detail flow, hat eine 2 Bereich layout auf größeren Bildschirmen. 7" tablets haben 1 klicken Sie in der Porträt-und 2 Scheiben in der Landschaft. Wenn ich das behalten 'Liste' - fragment-Instanz, wird es (denke ich) ficken Dinge mit Bildschirm Rotationen
  4. wenn der Benutzer auf ein Element klickt im 'list' - fragment, die 'content' - fragment ist dargestellt durch FragmentTransaction#replace(int, Fragment, String) mit der gleichen ID, aber einen anderen tag
  5. Ich habe überschreiben onSaveInstanceState(Bundle), aber das ist nicht immer aufgerufen vom framework, als pro doc: "Es gibt viele Situationen, in denen ein fragment werden kann, meist abgerissen (wie, wenn auf den Rücken gelegt stack ohne UI zu sehen), aber Ihr Zustand wird nicht gespeichert, bis Sie besitzenden Aktivität tatsächlich benötigt, um Ihren Zustand speichern."
  6. Ich bin mit dem support library

Aus der Kugel 5 oben, ich denke, die low-end-Geräte, die benötigen, um wieder Speicher nach einem fragment Transaktion aufrufen kann Fragment#onSaveInstanceState(Bundle). Jedoch, auf meinem Test-Geräte (Galaxy Nexus und Nexus 7), wird der Rahmen nicht an der Methode. Also das ist keine gültige option.

So, wie kann ich behalten, fragment-Daten? das bundle übergeben Fragment#onCreate, Fragment#onActivityCreated usw. ist immer null.

Daher kann ich nicht machen, einen Unterschied von einer Marke neues fragment starten Sie zu einem back stack wiederherstellen.

Hinweis: mögliche Verwandte/doppelte Frage

  • Jetzt ist die einzige option die ich habe ist: isFromBackStack = getActivity().getSupportFragmentManager().getBackStackEntryCount() > 0. Ich hätte gerne etwas sauberer, das fühlt sich an wie ein hack zu mir. Auch glaube ich nicht Bundle aus dem vorherigen fragment-Instanz.
Schreibe einen Kommentar