frammento Android suRestoreInstanceState


120

Mi manca qualcosa o Fragmentnon ho un onRestoreInstanceState()metodo? In caso contrario, come posso ottenere qualcosa di simile?

Risposte:


200

I frammenti non hanno un onRestoreInstanceStatemetodo.

È possibile ottenere lo stesso risultato in onActivityCreated, che riceve un bundle con lo stato dell'istanza salvata (o null).

Controlla il codice sorgente qui .


90
Non è un design coerente, vero?
Ehtesh Choudhury,

4
Anche questo non si occupa di riprendere il frammento vero? va bene per le modifiche alla configurazione, ma cosa succede se vai a un'attività da un frammento e poi torni al frammento?
speedynomads

1
I frammenti dovrebbero appartenere a un'attività per cominciare, quindi se si salva nel frammento, viene salvato nell'attività principale. Quindi, se lasci quel frammento (che appartiene a un'attività) e torni al frammento, tutti i valori vengono ripristinati dall'attività principale
Shaun

3
onActivityCreated () non è l'unico metodo per ripristinare lo stato del frammento. Puoi ripristinarlo durante onCreate (), onCreateView () o onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby

1
@EhteshChoudhury Niente nello sviluppo di app Android è "design coerente". È tutto incasinato e tutto è "deprecato".
Karanveer Singh

43

So che hai accettato la risposta, ma dovresti leggere la documentazione ufficiale sui frammenti , e dice (paragrafo "Gestione del ciclo di vita dei frammenti"):

È possibile mantenere lo stato di un frammento utilizzando un bundle, nel caso in cui il processo dell'attività venga terminato e sia necessario ripristinare lo stato del frammento quando l'attività viene ricreata. È possibile salvare lo stato durante il callback onSaveInstanceState () del frammento e ripristinarlo durante onCreate (), onCreateView () o onActivityCreated ()

Quindi, è possibile utilizzare tale vi si addice meglio: onCreate(), onCreateView(), oonActivityCreated()


29

In di guida Frammenti ListFragment esempio si possono trovare:

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

Che puoi usare in questo modo:

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

onActivityCreated() viene invocato dopo che il frammento è tornato dallo stack.


13

onViewStateRestoreddi Fragmentè l'equivalente di onRestoreInstanceStatedi Activity. Ma si chiama dopo onActivityCreated(Bundle)e prima onStart().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.