2013-10-11 4 views
9

Ich habe ein Problem im Zusammenhang mit dem Speichern meines Aktivitätsstatus. Ich habe viele Fragen hier in SO durchsucht und gelesen, aber ich konnte keine Antwort auf meine Frage bekommen.Wie onSaveInstanceState() - Bundle in onResume() abrufen?

Ich habe eine Activity A mit 2 Fragments. Die Activity A enthält die Daten, die von Fragments angezeigt werden. Wenn ich eine neue Intent für meine Einstellungen Activity die Activity A pausiert (nicht zerstört), onPause() und onSaveInstanceState() Methoden aufgerufen werden, so speichere ich alle meine Daten in onSaveInstaceState().

Wenn ich von meiner Einstellungen zurückkehren Taste zurück Activity A wieder angezeigt wird, aber onCreate() Methode nicht aufgerufen wird, weil die Activity nicht zerstört wurde, statt onResume() Methode wird aufgerufen, aber verlor ich den Zustand meiner Variablen in Activity A und I Ich kann nicht auf die Bundle zugreifen, die ich in onSaveInstanceState() gespeichert habe, weil onCreate() nicht aufgerufen wird.

So onSaveInstanceState() ist nur nützlich, wenn Sie den Bildschirm drehen? Wie kann ich auf alle Daten zugreifen, die ich unter onSaveInstanceState() gespeichert habe? Oder ich sollte sie in einer Datei oder SharedPrefs speichern, um später unter onResume() darauf zuzugreifen?

+1

Es ist nicht viel Sinn machen ... Sie die Daten Ihrer Instanzvariablen auf Acitivy A erklärt verloren haben? Sie sind null geworden? –

Antwort

23

Kann dies helfen?
1. Verwenden Sie getIntent().putExtras() in onStop(), um Ihre Daten in Activity's Bundle zu speichern.
2. Dann getIntent().getExtras() in onResume(), um es abzurufen.

Und sollten Sie eine NULL-Prüfung, bevor der Zugriff das Bündel tun :)

+0

Hat super funktioniert! Um die Daten zu speichern, habe ich 'getIntent(). PutExtras()' verwendet, weil 'getIntent(). GetExtras()' zu der Zeit null ist, wo Sie noch nichts gespeichert haben. – Andres

+0

Können Sie ein Beispiel teilen? Ich versuche dies in onStop/onResume zu implementieren, habe aber nicht viel Glück. – snapplex

+0

Es ist unglaublich, wie Android-Entwickler uns empfehlen, 'onSaveInstanceState',' onRestoreInstanceState' und 'onCreate' zu ​​verwenden, aber es ist sehr instabil. Danke für das Teilen, es hat mein Problem gelöst –

-3

Sie können im Bündel oder variable ganze Zeug von SavedInstance speichern.

und die Daten auf onActivityCreated Methode gesetzt wie:

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     // Do your stuff here 

} 
+0

Manchmal onActivityCreated nicht aufgerufen. –