Comment faire mon ViewPager charger qu'une seule page à la fois ie setOffscreenPageLimit(0);
Je comprends le moins que je puisse donner setOffscreenPageLimit(int)
est 1. mais j'ai besoin de charger une page à la fois en raison de problèmes de mémoire.
Vais-je avoir à utiliser l'ancien style tabhost etc? ou est-il un moyen/hack, je peux faire mon viewPager charger une page à la fois?
Ma Carte s'étend BaseAdapter avec le ViewHolder patern.
- voir le lien [stackoverflow.com/questions/17948681/... [1]: stackoverflow.com/questions/17948681/...
- Cochez cette répondre . Il résout le problème de moi.
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et j'ai trouvé la solution pour elle:
Suit:
1) d'Abord Télécharger le
CustomViewPager
Classe de cette lien.2) l'Utilisation de cette classe comme mentionné ci-dessous:
En Java:
En XML:
Maintenant qu'une page sera chargé à la fois.
P. S: Comme pour la question, j'ai posté la solution pour
Viewpager
. Je n'ai pas essayé la même chose avecTabLayout
encore. Si je trouve une solution pour que je mettrai à jour la réponse.Pour autant que je sais, c'est pas possible lors de l'utilisation de la ViewPager. Au moins pas, lorsque vous souhaitez que vos pages à glisser-mesure.
L'explication est donc très simple:
Lorsque vous glisser entre les deux pages, il y a un Point où les deux pages doivent être visibles, depuis vous ne pouvez pas glisser entre les deux choses lorsque l'un de ces n'existe même pas à ce point.
Voir cette question pour plus d': ViewPager.setOffscreenPageLimit(0) ne fonctionne pas comme prévu
CommonsWare fourni une bonne explication dans les commentaires de son réponse.
Qui présume que vous obtenez
OutOfMemoryError
s.Oui, ou
FragmentTabHost
, ou de l'action de la barre des onglets.Non, pour la simple raison que
ViewPager
besoin de plus d'une page à la fois pour le glissement de l'animation. Vous pouvez voir ce à l'aide d'unViewPager
, et le balayage.Ou, vous pouvez travailler sur la fixation de votre perception des problèmes de mémoire. En supposant que cette application est le même que celui que vous avez déclaré plus tôt aujourd'hui, vous êtes seulement à l'aide de 7 mo de mémoire. Qui ne fait qu'
OutOfMemoryError
s si le solde de votre tas est extrêmement fragmenté. Il existe des stratégies pour la gestion de la mémoire (par exemple,inBitmap
surBitmapOptions
pour créer des images bitmap à partir de sources externes) qui aider à remédier à la fragmentation des préoccupations.BaseAdapter
est pour une utilisation avecAdapterView
, pasViewPager
.En utilisant cette méthode, vous pouvez charger une page à la fois dans l'onglet mise en page avec vue pager`
HTML:
`
Remplacer la
setUserVisibleHint
et ajouterpostDelayed
comme ci-dessous dans votre tous les fragments.Je peux gérer, par ce moyen, et sa remarche pour moi.
Vous pouvez utiliser FragmentStatePagerAdapter. Cela permet le pager de tenir beaucoup moins de mémoire. Il supprime complètement Fragment d'instances de l'FragmentManager une fois qu'ils sont hors de portée. L'état de la disparition de Fragments est stocké à l'intérieur de la FragmentStatePagerAdapter. Le Fragment d'instance est recréé une fois que vous revenez à un élément existant et la restauration de l'état.
FragmentStatePagerAdapter
est que le off-page d'écran de la limite est encore plus grand que zéro, c'est à dire certaines pages sont encore sauvés quand ils ne sont pas visibles. La question est de demander à une solution où uniquement la page actuelle est chargé stocké.Je sais que c'est un vieux post, mais je suis tombé sur ce problème et trouvé une solution si votre chargement fragments. Simplement, vérifier si l'utilisateur est de voir le fragment ou non par des raisons impérieuses le setUserVisibleHint(). Après que le chargement des données.