108 votes

ViewPager.setOffscreenPageLimit(0) ne fonctionne pas comme prévu

Les fragments que j'utilise dans mon ViewPager exemple sont très gourmandes en ressources, alors je serais le seul à charger un à un. Quand j'ai essayer le suivant:

mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);

Mon FragmentStatePagerAdapter.getItem(int position) remplacer la fonction est appelé 3 fois, ce qui est ce qui se passe quand je l'appelle mViewPager.setOffscreenPageLimit(1). Je m'attends à ce qu'il ne sera appelée qu'une fois, parce que j'ai spécifié 0 pages à l'écran.

Je crois que je vais appeler tout correctement, parce que si je l'appelle, mViewPager.setOffscreenPageLimit(2), FragmentStatePagerAdapter.getItem(int position) est appelé 5 fois que je m'attends.

Ne ViewPager besoin d'un minimum de 1 à l'écran de pages, ou suis-je en train de faire quelque chose de mal ici?

126voto

Tyler Davis Points 82

La meilleure façon que j'ai trouvé était setUserVisibleHint
ajoutez ceci à votre fragment

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        // load data here
    }else{
       // fragment is no longer visible
    }
}

118voto

CommonsWare Points 402670

Ne ViewPager besoin d'un minimum de 1 à l'écran de pages

Oui. Si je lis le code source correctement, vous devriez avoir un avertissement à ce sujet dans le LogCat, quelque chose comme:

Requested offscreen page limit 0 too small; defaulting to 1

0voto

android developer Points 20939

pour le "instantiateItem" de la fonction, il suffit de préparer le fragment, mais ne pas charger le contenu lourd.

Utiliser "onPageChangeListener" , de sorte que chaque fois que vous accédez à une page spécifique, vous pouvez charger le contenu lourd et de la montrer.

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