129 votes

fragment Android onRestoreInstanceState

Est-ce que j'ai raté quelque chose ou est-ce que Fragment n'ont pas de onRestoreInstanceState() méthode ? Si ce n'est pas le cas, comment puis-je m'y prendre pour obtenir quelque chose de similaire ?

212voto

mgv Points 4250

Les fragments n'ont pas de onRestoreInstanceState méthode.

Vous pouvez obtenir le même résultat en onActivityCreated qui reçoit un bundle avec l'état de l'instance sauvegardée (ou null).

Vérifier le code source aquí .

92 votes

Ce n'est pas une conception cohérente, n'est-ce pas ?

5 votes

Cela ne prend pas non plus en compte la reprise du fragment, n'est-ce pas ? C'est bien pour les changements de configuration, mais que se passe-t-il si vous allez à une activité à partir d'un fragment et que vous revenez ensuite au fragment ?

1 votes

Les fragments devraient appartenir à une activité pour commencer, de sorte que si vous sauvegardez dans le fragment, il s'enregistre dans l'activité parente. Ainsi, si vous quittez ce fragment (qui appartient à une activité) et que vous revenez au fragment, toutes les valeurs sont alors restaurées à partir de l'activité parente.

48voto

jimpanzer Points 1458

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

Vous pouvez conserver l'état d'un fragment en utilisant un Bundle, au cas où le processus de l'activité est tué et que vous devez restaurer l'état du fragment lorsque l'activité est recréée. Vous pouvez sauvegarder l'état pendant le callback onSaveInstanceState() du fragment et le restaurer pendant onCreate(), onCreateView(), ou onActivityCreated().

Vous pouvez donc utiliser ce qui vous convient le mieux : onCreate() , onCreateView() ou onActivityCreated()

30voto

Gaurav Points 101

Dans le guide Fragments, la liste des fragments ListFragment exemple 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 invoqué après que le fragment soit revenu de la pile.

17voto

nhkhanh Points 877

onViewStateRestored de Fragment est l'équivalent de onRestoreInstanceState de Activity . Mais il est appelé après onActivityCreated(Bundle) et avant onStart() .

2voto

j2emanue Points 3456

onActivityCreated est obsolète . et j'ai trouvé que c'était juste confus en termes de cycle de vie des fragments. faites juste ceci :

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

// et ensuite :

  override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
            super.onViewCreated(view, savedInstanceState)
    savedIInistanceState?.let{ 
//restore the data here
    }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X