fragment android onRestoreInstanceState

120

Est-ce que je manque quelque chose ou je n'ai Fragmentpas de onRestoreInstanceState()méthode? Sinon, comment puis-je atteindre quelque chose de similaire?

Shaun
la source

Réponses:

200

Les fragments n'ont pas de onRestoreInstanceStateméthode.

Vous pouvez obtenir le même résultat dans onActivityCreated, qui reçoit un bundle avec l'état d'instance enregistré (ou null).

Vérifiez le code source ici .

mgv
la source
90
Ce n'est pas une conception cohérente, n'est-ce pas?
Ehtesh Choudhury
4
Cela ne prend pas non plus en charge la reprise du fragment, n'est-ce pas? c'est bien pour les changements de configuration, mais que se passe-t-il si vous accédez à une activité à partir d'un fragment, puis revenez au fragment?
speedynomads
1
Les fragments doivent appartenir à une activité pour commencer, donc si vous enregistrez dans le fragment, il est enregistré dans l'activité parente. Donc, si vous quittez ce fragment (qui appartient à une activité) et revenez au fragment, toutes les valeurs sont ensuite restaurées à partir de l'activité parente
Shaun
3
onActivityCreated () n'est pas la seule méthode pour restaurer l'état du fragment.Vous pouvez le restaurer pendant onCreate (), onCreateView () ou onActivityCreated (). developer.android.com/guide/components/fragments.html
shaby
1
@EhteshChoudhury Rien dans le développement d'applications Android n'est une «conception cohérente». Tout est foiré et tout est "obsolète".
Karanveer Singh
43

Je sais que vous avez accepté la réponse, mais vous devriez lire la documentation officielle sur les fragments , et elle dit (paragraphe "Gestion du cycle de vie des fragments"):

Vous pouvez conserver l'état d'un fragment à l'aide d'un Bundle, au cas où le processus de l'activité serait arrêté et que vous deviez restaurer l'état du fragment lorsque l'activité est recréée. Vous pouvez enregistrer l'état pendant le rappel onSaveInstanceState () du fragment et le restaurer pendant onCreate (), onCreateView () ou onActivityCreated ()

Ainsi , vous pouvez utiliser que vous convient le mieux: onCreate(), onCreateView()ouonActivityCreated()

jimpanzer
la source
29

Dans l' exemple ListFragment du guide Fragments, vous pouvez trouver:

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

Que vous pouvez utiliser comme ceci:

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

onActivityCreated() est appelée après le retour du fragment de la pile.

Gaurav Darji
la source
13

onViewStateRestoredde Fragmentest l'équivalent onRestoreInstanceStatede Activity. Mais il est appelé après onActivityCreated(Bundle)et avant onStart().

nhkhanh
la source