Question

J'ai un ViewPager accroché à un FragmentPagerAdapter qui est l'affichage de trois fragments. Le ViewPager semble détruire la vue d'un fragment hébergé quand il est plus d'un coup loin de la position actuelle.

Ces vues sont toutes les listes simples et cette optimisation est tout à fait inutile, donc je voudrais le désactiver. Cela cause des problèmes visuels parce que les listes ont des animations de mise en page qui leur sont appliquées et les animations sont rejouées après qu'ils ont été détruits et recréés. Il montre également la barre de défilement intro animation chaque fois (où la barre de défilement est brièvement visible pour indiquer que le défilement est possible) qui peut être source de distraction, et est perdu position de défilement actuelle de l'utilisateur dans le processus.

Il ne se charge pas aussi le troisième fragment jusqu'à ce que le premier coup se produit, ce qui est problématique parce que chaque fragment gère ses propres appels de service et je préfère avoir trois feu au large en même temps lorsque les charges d'activité. Avoir le troisième appel de service retardé est moins qu'idéal.

Est-il possible de convaincre ViewPager d'arrêter ce comportement et juste garder tous mes fragments en mémoire?

Était-ce utile?

La solution

révision 4 du Support Package, une méthode a été ajouté à ViewPager qui vous permet de spécifier le nombre de pages à utiliser hors écran, plutôt que la valeur par défaut qui est 1.

Dans votre cas, vous souhaitez spécifier 2, de sorte que lorsque vous êtes sur la troisième page, le premier ne soit pas détruit, et vice-versa.

mViewPager = (ViewPager)findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(2);

Autres conseils

Par défaut, les fragments ViewPager reconstitue quand vous utilisez la page. Pour éviter cela, vous pouvez essayer une des deux choses:

1. Dans la onCreate () de vos fragments, setRetainInstance d'appel (true).

2 Si le nombre de fragments est fixé et relativement faible, puis dans votre onCreate () ajoutez le code suivant:.

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setOffscreenPageLimit(3);

Si je me souviens bien, la deuxième option est plus prometteuse. Mais je vous invite à essayer les deux et voir qui d'entre eux travaillent.

« Définissez le nombre de pages qui doivent être conservés de chaque côté de la page courante dans la hiérarchie de la vue dans un état de repos. Pages au-delà de cette limite sera recréée à partir de l'adaptateur en cas de besoin. »

http://developer.android .com / référence / android / support / v4 / view / ViewPager.html # setOffscreenPageLimit (int)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top