Wenn sich die Ausrichtung ändert, wird das Fragment viewState
nur in onStart
wiederhergestellt.
Nach onAttach
, onCreateView
, onViewCreated
und onActivityCreated
und sogar nach onCreate
.
Warum? Das ist zu spät.
Ich muss db-Abfrageergebnisse basierend auf einem TextView-Wert zu ListView auffüllen. Derzeit versuche ich dies in onViewCreated
. Aber der Ansichtszustand wird bei diesem Schritt nicht wiederhergestellt.
Kann ich die Wiederherstellung vorzeitig erzwingen? Oder wie man dieses Problem überwinden kann? Irgendwelche Ideen, bitte.
PS: Ich benutze actionbarsherlock und abhängige Android-Support-v4 r7-Bibliothek
PS2: Wenn ich Daten in onStart
laden will, wird es zusätzliche Abfragen geben, wenn das Fragment nach onStop
fortgesetzt wird (ich kann das lösen, indem ich eine boolesche isLoaded
hinzufüge - aber das ist nicht die beste Lösung).
In Android API & gt; = 17 (Android 4.2 Jelly Beans) gibt es eine Methode:
public void onViewStateRestored (Bundle savedInstanceState)
, das vor onStart()
und nach onActivityCreated()
aufgerufen wird, wie in Dokumente .
In der Android-API & lt; 17 Es gibt keine solche Methode. Aber es gibt zwei Lösungen:
Fragment
nicht auf den Ansichtszustand, und speichern Sie alle erforderlichen Initialisierungsstatus als Fragment
state (d. h. überschreiben Sie Fragment#onSaveInstanceState()
). Später können Sie den Fragmentstatus in onCreate()
, onCreateView()
oder onViewCreated()
. onStart()
wie in Frage angegeben aus. [EDIT 1 - - - - - - -]
// Überprüfen Sie, ob der Fragment-Back-Stack befüllt wurde
// Wenn nicht, erstellen und füllen Sie das Layout.
// Ihr Fragment wird also nicht neu erstellt
%Vor%[EDIT 1 - - - - - - -]
%Vor%
Quelle: Professionelle Android-Entwicklung 4 - Reto Meier
Tags und Links android