Android-Fragment onRestoreInstanceState

120

Vermisse ich etwas oder habe ich Fragmentkeine onRestoreInstanceState()Methode? Wenn nicht, wie gehe ich vor, um etwas Ähnliches zu erreichen?

Shaun
quelle

Antworten:

200

Fragmente haben keine onRestoreInstanceStateMethode.

Sie können das gleiche Ergebnis erzielen onActivityCreated, indem Sie ein Bundle mit dem Status der gespeicherten Instanz (oder null) erhalten.

Überprüfen Sie den Quellcode hier .

mgv
quelle
89
Das ist kein einheitliches Design, oder?
Ehtesh Choudhury
4
Dies kümmert sich auch nicht um die Wiederaufnahme des Fragments, oder? Es ist in Ordnung für Konfigurationsänderungen, aber was ist, wenn Sie von einem Fragment zu einer Aktivität gehen und dann zum Fragment zurückkehren?
Speedynomads
1
Fragmente sollten zunächst zu einer Aktivität gehören. Wenn Sie also im Fragment speichern, wird es in der übergeordneten Aktivität gespeichert. Wenn Sie also dieses Fragment (das zu einer Aktivität gehört) verlassen und zum Fragment zurückkehren, werden alle Werte aus der übergeordneten Aktivität wiederhergestellt
Shaun
3
onActivityCreated () ist nicht die einzige Methode, um den Status des Fragments wiederherzustellen. Sie können ihn entweder während onCreate (), onCreateView () oder onActivityCreated () wiederherstellen. developer.android.com/guide/components/fragments.html
Shaby
1
@EhteshChoudhury Nichts in der Android-App-Entwicklung ist "konsistentes Design". Es ist alles durcheinander und alles ist "veraltet".
Karanveer Singh
43

Ich weiß, dass Sie die Antwort akzeptiert haben, aber Sie sollten die offizielle Dokumentation über Fragmente lesen und darin steht (Absatz "Umgang mit dem Fragmentlebenszyklus"):

Sie können den Status eines Fragments mithilfe eines Bundles beibehalten, falls der Prozess der Aktivität abgebrochen wird und Sie den Fragmentstatus wiederherstellen müssen, wenn die Aktivität neu erstellt wird. Sie können den Status während des Rückrufs von onSaveInstanceState () des Fragments speichern und entweder während onCreate (), onCreateView () oder onActivityCreated () wiederherstellen.

So können Sie feststellen , dass Anzüge verwenden Sie am besten können : onCreate(), onCreateView()oderonActivityCreated()

jimpanzer
quelle
29

Im ListFragment- Beispiel des Fragment-Handbuchs finden Sie:

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("curChoice", mCurCheckPosition);
}

Was Sie so verwenden können:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

onActivityCreated() wird aufgerufen, nachdem das Fragment vom Stapel zurückgekehrt ist.

Gaurav Darji
quelle
13

onViewStateRestoredvon Fragmentist das Äquivalent onRestoreInstanceStatevon Activity. Aber es heißt nach onActivityCreated(Bundle)und vor onStart().

nhkhanh
quelle