404 votes

Quelle est la différence entre FragmentPagerAdapter et FragmentStatePagerAdapter ?

Quelle est la différence entre FragmentPagerAdapter et FragmentStatePagerAdapter ?

À propos de FragmentPagerAdapter Le guide de Google dit :

Cette version du téléavertisseur est la meilleure lorsqu'il y a une poignée d'utilisateurs. fragments typiquement plus statiques à parcourir, comme un ensemble d'onglets. onglets. Le fragment de chaque page visitée par l'utilisateur sera conservé en mémoire, bien que sa hiérarchie de vue puisse être détruite lorsqu'elle n'est pas visible. Cela peut entraîner l'utilisation d'une quantité importante de mémoire puisque le fragment peuvent conserver une quantité arbitraire d'états. Pour de plus grands ensembles de pages, envisagez FragmentStatePagerAdapter .

Et sur FragmentStatePagerAdapter :

Cette version du téléavertisseur est plus utile lorsqu'il y a un nombre important de pages, et fonctionne davantage comme une vue en liste. Lorsque les pages ne sont pas visibles pour l'utilisateur, leur fragment entier peut être détruit, en gardant seulement l'état état sauvegardé de ce fragment. Cela permet à l'afficheur de conserver beaucoup moins de mémoire associée à chaque page visitée. moins de mémoire associée à chaque page visitée, par rapport à FragmentPagerAdapter au prix d'une surcharge potentielle lors du le passage d'une page à l'autre.

Je n'ai donc que 3 fragments. Mais tous sont des modules séparés avec une grande quantité de données.

Fragment1 traite certaines données (saisies par les utilisateurs) et les transmet, par le biais de l'activité, aux services suivants Fragment2 qui est juste un simple ListFragment . Fragment3 est également un ListFragment .

Mes questions sont donc les suivantes : Quel adaptateur dois-je utiliser ? FragmentPagerAdapter o FragmentStatePagerAdapter ?

2 votes

Je pense que le fait de n'avoir que 3 fragments vous permet d'utiliser le FragmentPagerAdapter. Les onglets de ces fragments seront probablement tous visibles simultanément.

2 votes

Ce post a sauvé mes 5-6 heures parce que j'utilise le mauvais type d'adaptateur

1 votes

La réponse à cette question jette une autre question stackoverflow.com/questions/9156406/

4voto

Dwivedi Ji Points 2895

FragmentStatePagerAdapter = Pour accueillir un grand nombre de fragments dans le ViewPager. Cet adaptateur détruit le fragment lorsqu'il n'est pas visible pour l'utilisateur et seul l'état de l'instance sauvegardée du fragment est conservé pour une utilisation ultérieure. De cette façon, une faible quantité de mémoire est utilisée et une meilleure performance est fournie dans le cas de fragments dynamiques.

3voto

foroogh Varmazyar Points 478

FragmentPagerAdapter : le fragment de chaque page que l'utilisateur visite sera stocké en mémoire, bien que la vue soit détruite. Ainsi, lorsque la page sera à nouveau visible, la vue sera recréée mais l'instance du fragment ne sera pas recréée. Cela peut entraîner l'utilisation d'une quantité importante de mémoire. FragmentPagerAdapter doit être utilisé lorsque nous avons besoin de stocker le fragment entier en mémoire. FragmentPagerAdapter appelle detach(Fragment) sur la transaction au lieu de remove(Fragment).

FragmentStatePagerAdapter l'instance de fragment est détruite lorsqu'elle n'est pas visible par l'utilisateur, à l'exception de l'état sauvegardé du fragment. Ceci a pour résultat d'utiliser seulement une petite quantité de mémoire et peut être utile pour manipuler de plus grands ensembles de données. Devrait être utilisé lorsque nous devons utiliser des fragments dynamiques, comme les fragments avec des widgets, comme leurs données pourraient être stockées dans le savedInstanceState.aussi il n'affectera pas la performance même si il ya un grand nombre de fragments.

0voto

Sanam Yavarpor Points 168

Selon doc :

Il existe deux types de PagerAdapters standard qui gèrent le cycle de vie de chaque fragment : FragmentPagerAdapter et FragmentStatePagerAdapter. Les deux fonctionnent bien avec les fragments, mais ils sont mieux adaptés à des scénarios différents :

  • Le FragmentPagerAdapter stocke les fragments en mémoire tant que l'utilisateur peut naviguer entre eux. Lorsqu'un fragment n'est pas visible, le PagerAdapter le détache, mais ne le détruit pas, de sorte que l'instance du fragment reste vivante dans le FragmentManager. Elle ne sera libérée de la mémoire que lorsque l'activité s'arrêtera. Cela peut rendre la transition entre les pages rapide et fluide, mais cela peut causer des problèmes de mémoire dans votre application si vous avez besoin de nombreux fragments.

  • Le FragmentStatePagerAdapter s'assure de détruire tous les fragments que l'utilisateur ne voit pas et ne conserve que leurs états enregistrés dans le FragmentManager, d'où son nom. Lorsque l'utilisateur navigue à nouveau vers un fragment, il le rétablit en utilisant l'état sauvegardé. Ce PagerAdapter nécessite beaucoup moins de mémoire, mais le processus de basculement entre les pages peut être plus lent.

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