J'utilise ViewPager dans mon application et je le définis dans l'activité principale. À l'intérieur de la onCreate
méthode, je charge un certain nombre de pages à partir de SharedPreferences, puis je le transmets à PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
Le problème est que si je devais changer ce nombre dans Préférences (ou une autre activité) en un autre index de page inférieur à celui que j'ai consulté auparavant, mon application se bloque car cet index est hors limites lorsque je reviens à l'activité avec ce ViewPager. Il peut être corrigé simplement en modifiant la page active de ViewPager. Y a-t-il un moyen de le faire?
la source
0
dans laonPause
méthode et il n'y a pas de crash. Merci.glisser vers la droite
viewPager.arrowScroll (View.FOCUS_RIGHT);
glisser vers la gauche
viewPager.arrowScroll (View.FOCUS_LEFT);
la source
Sans vérifier votre code, je pense que ce que vous décrivez, c'est que vos pages ne sont pas synchronisées et que vous avez des données périmées.
Vous dites que vous modifiez le nombre de pages, puis que vous vous plantez parce que vous accédez à l'ancien ensemble de pages. Il me semble que vous n'appelez pas
pageAdapter.notifyDataSetChanged()
après avoir modifié vos données.Lorsque vous
viewPager
affichez la page 3 d'un ensemble de 10 pages, et que vous passez à un ensemble avec seulement 5, puis appeleznotifyDataSetChanged()
, vous constaterez que vous visualisez maintenant la page 3 du nouvel ensemble. Si vous consultiez précédemment la page 8 de l'ancien ensemble, après avoir inséré le nouvel ensemble et appelé,notifyDataSetChanged()
vous constaterez que vous visualisez maintenant la dernière page du nouvel ensemble sans planter.Si vous modifiez simplement votre page actuelle, vous ne faites peut-être que masquer le problème.
la source
notifyDataSetChanged()
pour passer à une autre page, essayez avec ce code:
la source
viewPager.setCurrentItem
Réponse supplémentaire
À l'origine, j'avais du mal à obtenir une référence à la à
ViewPager
partir d'autres méthodes de classe parce que laaddOnTabSelectedListener
classe interne était anonyme, ce qui nécessitait à son tour que laViewPager
variable soit déclaréefinal
. La solution consistait à utiliser une variable membre de classe et non à utiliser la classe interne anonyme.la source