7

Ich habe ein verschachteltes Fragment, das ich versuche, den Zustand bei einer Orientierungsänderung wiederherzustellen.Kann ein verschachteltes Fragment nicht gespeichert und wiederhergestellt werden?

Also erstens mein Setup ist wie folgt:

Activity -> ParentFragment (SetRetainInstance(true)) -> ChildFragment 

In My Child Fragment Ich habe den onSaveInstance Code wie folgt:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    // Serialize the current dropdown position. 
    outState.putInt(STATE_SELECTED_NAVIGATION_ITEM, getActivity().getActionBar() 
      .getSelectedNavigationIndex()); 
} 

Jedoch, wenn ich das Gerät in allen LifeCycle Ereignisse orientieren zurückkehren ein savedInstance-Status von null

Mache ich das falsch für ein ChildFragment? Warum wird mein Staat nicht gerettet und zurückgegeben?

Antwort

7

Es liegt an setRetainInstance(true) Ihres Elternfragments. Android behält ein Fragment mit allen seinen Kindfragmenten bei. Daher wird Ihr ChildFragment nicht zerstört, und deshalb erhalten Sie in savedInstanceState null. Die Dokumentation von onCreateView Staaten:

savedInstanceState Wenn nicht leer ist, dieses Fragment wird aus einem frühen gespeicherten Zustand wieder aufgebaut, wie hier gegeben.

Sie können versuchen, setRetainInstance(true) auskommentieren und sicherstellen, dass Sie den richtigen Wert für savedInstanceState erhalten.

+0

Funktioniert diese Lösung für Sie? –

+0

Ja, aber vor zwei Jahren. :) Vielleicht hat sich seitdem etwas geändert. – Ayzen