fragment Androida onRestoreInstanceState


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 .


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


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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.