Saya menggunakan ViewPager di aplikasi saya dan mendefinisikannya di Aktivitas utama. Di dalam onCreate
metode saya memuat beberapa halaman dari SharedPreferences dan kemudian meneruskannya ke PagerAdapter:
@Override
public int getCount() {
return numberOfPages;
}
Masalahnya adalah jika saya mengubah nomor ini di Preferensi (atau Aktivitas lain) ke indeks halaman lain yang kurang dari yang saya lihat sebelumnya, aplikasi saya mogok karena indeks ini di luar batas ketika saya kembali ke aktivitas dengan ViewPager ini. Itu dapat diperbaiki hanya dengan mengubah halaman ViewPager yang aktif. Apakah ada cara untuk melakukannya?
0
dalamonPause
metode dan tidak ada crash. Terima kasih.geser ke kanan
viewPager.arrowScroll (View.FOCUS_RIGHT);
geser ke kiri
viewPager.arrowScroll (View.FOCUS_LEFT);
sumber
Tanpa memeriksa kode Anda, saya pikir apa yang Anda uraikan adalah bahwa halaman Anda tidak sinkron dan Anda memiliki data basi.
Anda mengatakan Anda mengubah jumlah halaman, lalu mogok karena Anda mengakses set halaman yang lama. Bagi saya ini kedengarannya seperti Anda tidak menelepon
pageAdapter.notifyDataSetChanged()
setelah mengubah data Anda.Ketika Anda
viewPager
menampilkan halaman 3 dari set 10 halaman, dan Anda mengubah ke set dengan hanya 5, kemudian meneleponnotifyDataSetChanged()
, apa yang akan Anda temukan adalah Anda sekarang melihat halaman 3 dari set baru. Jika sebelumnya Anda melihat halaman 8 dari set lama, setelah memasukkan set baru dan meneleponnotifyDataSetChanged()
Anda akan menemukan Anda sekarang melihat halaman terakhir dari set baru tanpa menabrak.Jika Anda hanya mengubah halaman Anda saat ini, Anda mungkin hanya menutupi masalah.
sumber
notifyDataSetChanged()
untuk beralih ke halaman lain, coba dengan kode ini:
sumber
viewPager.setCurrentItem
Jawaban tambahan
Saya awalnya kesulitan mendapatkan referensi ke
ViewPager
dari metode kelas lain karenaaddOnTabSelectedListener
membuat kelas dalam anonim, yang pada gilirannya mengharuskanViewPager
variabel untuk dideklarasikanfinal
. Solusinya adalah dengan menggunakan variabel anggota kelas dan tidak menggunakan kelas batin anonim.sumber