Ich verwende ViewPager in meiner App und definiere es in der Hauptaktivität. Innerhalb der onCreate
Methode lade ich einige Seiten aus SharedPreferences und übergebe sie dann an PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
Das Problem ist, dass meine App abstürzt, wenn ich diese Nummer in den Einstellungen (oder einer anderen Aktivität) in einen anderen als den zuvor angezeigten Seitenindex ändern würde, da dieser Index außerhalb der Grenzen liegt, wenn ich mit diesem ViewPager zur Aktivität zurückkehre. Dies kann einfach durch Ändern der aktiven ViewPager-Seite behoben werden. Gibt es eine Möglichkeit, dies zu tun?
quelle
0
inonPause
Methode gesetzt und es gibt keine Abstürze. Vielen Dank.nach rechts schieben
viewPager.arrowScroll (View.FOCUS_RIGHT);
nach links schieben
viewPager.arrowScroll (View.FOCUS_LEFT);
quelle
Ohne Ihren Code zu überprüfen, beschreiben Sie meiner Meinung nach, dass Ihre Seiten nicht synchron sind und Sie veraltete Daten haben.
Sie sagen, Sie ändern die Anzahl der Seiten und stürzen dann ab, weil Sie auf die alten Seiten zugreifen. Das klingt für mich so, als würden Sie
pageAdapter.notifyDataSetChanged()
nach dem Ändern Ihrer Daten nicht anrufen .Wenn Sie
viewPager
Seite 3 eines Satzes von 10 Seiten anzeigen und zu einem Satz mit nur 5 Seiten wechseln und dann anrufennotifyDataSetChanged()
, sehen Sie, dass Sie jetzt Seite 3 des neuen Satzes anzeigen. Wenn Sie zuvor Seite 8 des alten Satzes angezeigt haben, werden Sie nach dem Einfügen des neuen Satzes und dem AufrufennotifyDataSetChanged()
feststellen, dass Sie jetzt die letzte Seite des neuen Satzes ohne Absturz anzeigen.Wenn Sie einfach Ihre aktuelle Seite ändern, maskieren Sie möglicherweise nur das Problem.
quelle
notifyDataSetChanged()
Versuchen Sie Folgendes, um zu einer anderen Seite zu wechseln:
quelle
viewPager.setCurrentItem
Ergänzende Antwort
Ich hatte ursprünglich Probleme, einen Verweis auf die
ViewPager
von anderen Klassenmethoden zu erhalten, weil dieaddOnTabSelectedListener
eine anonyme innere Klasse erstellt hat, für die wiederum dieViewPager
Deklaration der Variablen erforderlich warfinal
. Die Lösung bestand darin, eine Klassenmitgliedsvariable und nicht die anonyme innere Klasse zu verwenden.quelle