65 votes

La fonction onSaveInstanceState() du fragment n'est jamais appelée

J'essaie de sauvegarder des données dans la méthode onSaveInstanceState() d'un fragment, mais cette méthode n'est jamais appelée.

Quelqu'un peut-il nous aider ?

public class MyFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ScrollView content = (ScrollView) inflater.inflate(R.layout.content, container, false);
        // More stuff
        return content;
    }

    @Override
    public void onSaveInstanceState(Bundle icicle) {
        // NEVER CALLED
        super.onSaveInstanceState(icicle);
        //More stuff
    }

}

69voto

James Points 1178

J'ai finalement trouvé le problème, du moins dans mon cas. J'avais un onSaveInstanceState dans mon FragmentActivity qui n'a pas appelé super.onSaveInstanceState(Bundle outState) . Une fois que j'ai ajouté cela, le Fragment.onSaveInstanceState(Bundle outState) a fonctionné normalement.

33voto

Zephyr Points 374

J'ai rencontré la même question que vous, et j'ai essayé la méthode onSaveInstanceState(), mais cela n'a pas fonctionné.

Je pense que onSaveInstanceState() ne fonctionne que dans le cas où l'utilisateur passe d'une activité à une autre et vice-versa, mais pas dans le cas où l'utilisateur passe d'un fragment à l'autre dans la même activité.

Voici le document guide de Google. http://developer.Android.com/guide/components/tasks-and-back-stack.html#ActivityState

8voto

Fyodor Volchyok Points 31

Dans certaines situations, il peut s'avérer utile d'utiliser la fonction arguments des fragments au lieu de savedInstanceState . Explications complémentaires .

6voto

Scott Points 503

Une chose à vérifier est que l'activité qui contient le fragment n'empêche pas un redémarrage en incluant l'option android:configChanges dans le fichier AndroidManifest.xml.

-1voto

Yossie Points 1

Essayez d'appeler FragmentManager#saveFragmentInstanceState y Fragment#setInitialSavedState en activité. Vous appelez saveFragmentInstanceState, puis le framework appellera onSaveInstanceState. Et vous appelez setInitialSavedState, alors le framework appellera onCreateView avec un argument null 'Bundle savedInstanceState'.

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