Fragment ViewState in onStart wiederhergestellt?

8

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).

    
acc15 24.12.2012, 12:44
quelle

3 Antworten

12

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:

  1. Verlassen Sie sich beim Initialisieren von 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() .
  2. wiederherstellen
  3. Führen Sie die Initialisierung in onStart() wie in Frage angegeben aus.
acc15 24.12.2012, 15:45
quelle
4

[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

    
Talha 24.12.2012 12:56
quelle
0

Sie können Orientierungsänderungen immer selbst mit onConfigurationChanged() bearbeiten. Sehen Sie ein schönes Beispiel hier Ссылка

    
TOMKA 24.12.2012 14:30
quelle

Tags und Links