J'ai un ViewPager connecté à un FragmentPagerAdapter qui affiche trois fragments. Le ViewPager semble détruire la vue d'un fragment hébergé lorsqu'il est à plus d'un balayage de la position actuelle.
Ces vues sont toutes des listes simples et cette optimisation est complètement inutile, je voudrais donc la désactiver. Cela pose des problèmes visuels car les listes ont des animations de mise en page qui leur sont appliquées et ces animations sont rejouées après avoir été détruites et recréées. Il montre également l'animation d'introduction de la barre de défilement à chaque fois (où la barre de défilement est brièvement visible pour indiquer que le défilement est possible), ce qui peut être gênant, et la position de défilement actuelle de l'utilisateur est perdue dans le processus.
Il ne charge pas non plus le troisième fragment avant le premier balayage, ce qui est problématique car chaque fragment gère ses propres appels de service et je préférerais que les trois se déclenchent en même temps lorsque l'activité se charge. Avoir le troisième appel de service retardé est loin d'être idéal.
Existe-t-il un moyen de convaincre ViewPager d'arrêter ce comportement et de simplement garder tous mes fragments en mémoire?
Par défaut, ViewPager recrée les fragments lorsque vous faites glisser la page. Pour éviter cela, vous pouvez essayer l'une des deux choses suivantes:
1. Dans le onCreate () de vos fragments, appelez setRetainInstance (true).
2. Si le nombre de fragments est fixe et relativement petit, dans votre onCreate (), ajoutez le code suivant:
Si je me souviens bien, la deuxième option est plus prometteuse. Mais je vous exhorte à essayer les deux et à voir lequel d'entre eux fonctionne.
la source
"Définissez le nombre de pages à conserver de chaque côté de la page actuelle dans la hiérarchie d'affichage à l'état inactif. Les pages au-delà de cette limite seront recréées à partir de l'adaptateur si nécessaire."
http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)
la source