fragment Androida onRestoreInstanceState

120

Czy coś mi brakuje lub Fragmentnie mam onRestoreInstanceState()metody? Jeśli nie, jak mam osiągnąć coś podobnego?

Shaun
źródło

Odpowiedzi:

200

Fragmenty nie mają onRestoreInstanceStatemetody.

Ten sam rezultat można osiągnąć w onActivityCreated, w którym otrzymuje się pakiet z zapisanym stanem instancji (lub zerowym).

Sprawdź kod źródłowy tutaj .

mgv
źródło
90
To nie jest spójny projekt, prawda?
Ehtesh Choudhury
4
To też nie dba o wznowienie fragmentu, prawda? jest w porządku w przypadku zmian konfiguracji, ale co jeśli przejdziesz do działania z fragmentu, a następnie wrócisz do tego fragmentu?
speedynomads
1
Na początku fragmenty powinny należeć do działania, więc jeśli zapiszesz w fragmencie, zostanie on zapisany w działaniu nadrzędnym. Więc jeśli opuścisz ten fragment (który należy do działania) i wrócisz do fragmentu, wszystkie wartości zostaną przywrócone z aktywności rodzicielskiej
Shaun,
3
onActivityCreated () nie jest jedyną metodą przywracania stanu fragmentu, ale można go przywrócić podczas onCreate (), onCreateView () lub onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Nic w tworzeniu aplikacji na Androida nie jest „spójnym projektem”. Wszystko jest pomieszane i wszystko jest „przestarzałe”.
Karanveer Singh
43

Wiem, że zaakceptowałeś odpowiedź, ale powinieneś przeczytać oficjalną dokumentację dotyczącą fragmentów , która mówi (akapit „Obsługa cyklu życia fragmentów”):

Możesz zachować stan fragmentu za pomocą paczki na wypadek, gdyby proces działania został zabity i musisz przywrócić stan fragmentu po odtworzeniu działania. Możesz zapisać stan podczas wywołania zwrotnego onSaveInstanceState () fragmentu i przywrócić go podczas onCreate (), onCreateView () lub onActivityCreated ()

Tak, można używać który najbardziej Ci odpowiada: onCreate(), onCreateView()lubonActivityCreated()

jimpanzer
źródło
29

W przykładzie ListFragment przewodnika po fragmentach można znaleźć:

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

Którego możesz użyć w ten sposób:

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

onActivityCreated() jest wywoływana po powrocie fragmentu ze stosu.

Gaurav Darji
źródło
13

onViewStateRestoredz Fragmentjest równoważna onRestoreInstanceStatez Activity. Ale nazywa się to po onActivityCreated(Bundle)i przed onStart().

nhkhanh
źródło