Fragmen yang saya gunakan dalam ViewPager
contoh saya cukup intensif sumber daya, jadi saya hanya ingin memuat satu per satu. Ketika saya mencoba yang berikut ini:
mViewPager.setOffscreenPageLimit(0);
mViewPager.setAdapter(mPagerAdapter);
FragmentStatePagerAdapter.getItem(int position)
Fungsi override saya dipanggil 3 kali, itulah yang terjadi saat saya memanggil mViewPager.setOffscreenPageLimit(1)
. Saya berharap itu hanya dipanggil sekali, karena saya menentukan 0 halaman di luar layar.
Saya yakin saya memanggil semuanya dengan benar, karena jika saya menelepon mViewPager.setOffscreenPageLimit(2)
, FragmentStatePagerAdapter.getItem(int position)
akan dipanggil 5 kali seperti yang saya harapkan.
Apakah ViewPager memerlukan minimal 1 halaman di luar layar, atau apakah saya melakukan kesalahan di sini?
android
android-viewpager
android-support-library
Chris Lacy
sumber
sumber
ViewPager.setOffscreenPageLimit(2)
berfungsi untuk saya. CobaViewPager.setOffscreenPageLimit(totTabs - 1)
Jawaban:
Iya. Jika saya membaca kode sumber dengan benar, Anda seharusnya mendapatkan peringatan tentang ini di LogCat, seperti:
sumber
ViewPager
.ViewPager
membuat fragmen ini sehingga tampilan tersebut ada, sehingga pengguna dapat menggeser di antara tampilan, dengan efek animasi yang menunjukkan tampilan lama meluncur dari layar dan tampilan baru meluncur ke layar. Anda dipersilakan untuk mencoba menulis sendiriViewPager
yang bisa menggesek di antara hal-hal yang tidak ada. Anda dapat membaca lebih lanjut tentang ini di code.google.com/p/android/issues/detail?id=56667#c3setOffscreenPageLimit(0)
0. Kemudian saya bisa menghadapi konsekuensinya sendiri. Fragmen kosong default bisa menjadi placeholder misalnya sampai fragmen tersebut dimuat. Semuanya bisa terjadi di luar thread UI. Pokoknya aku belum terlalu memikirkannya.ViewPager
, yang Anda ganti dengan konten sebenarnya jika tersedia .Cara terbaik yang saya temukan adalah setUserVisibleHint
menambahkan ini ke fragmen Anda
sumber
Anda bisa mencoba seperti ini:
sumber
Tambahkan Pertama
dari
sumber
ViewPager default untuk memuat halaman berikutnya (Fragment) yang tidak dapat Anda ubah dengan setOffscreenPageLimit (0). Tapi Anda bisa melakukan sesuatu untuk diretas. Anda bisa mengimplementasikan fungsi onPageSelected dalam Aktivitas yang berisi ViewPager. Di Fragmen berikutnya (yang tidak ingin Anda muat), Anda menulis fungsi, katakanlah showViewContent () tempat Anda memasukkan semua kode init yang memakan sumber daya dan tidak melakukan apa pun sebelum metode onResume (). Kemudian panggil fungsi showViewContent () di dalam onPageSelected. Semoga ini bisa membantu.
sumber
ini mungkin utas lama tetapi tampaknya ini berhasil untuk saya. Ganti fungsi ini:
selamat coding ...
sumber
dalam kasus saya, saya ingin memulai beberapa animasi dalam tampilan, tetapi dengan setUserVisibleHint mendapat beberapa masalah ...
solusi saya adalah:
1 / addOnPageChangeListener untuk adaptor Anda:
2 / implementasikan OnPageChangeListener:
3 / timpa 3 metode:
4 / deklarasikan dan lakukan inisialisasi variabel ini di kelas Anda
pemberitahuan : saya memiliki tiga fragmen di adaptor saya, dan menggunakan mTabState untuk setCurrentItem dan posisi adaptor saat ini yang mengenali fragmen mana yang ditampilkan kepada pengguna tepat waktu ... 5 / dalam metode onPageSelected tambahkan kode ini:
jika halaman sebelumnya atau halaman saat ini adalah halaman 0 (fragmen di posisi 0) maka lakukan hal ini
6 / sekarang di kelas fragmen Anda (fragmen di posisi 0 adaptor), Anda harus membuat penerima siaran dan mendaftarkannya dalam metode onResume dan membatalkan pendaftarannya pada metode onPause:
ringkasan: Saya memiliki Penyihir Adaptor Pager Fragmen yang menunjukkan Tiga Fragmen di dalamnya, saya ingin menampilkan beberapa Animasi pada Tampilan dalam Fragmen di Posisi 0 Adaptor, Untuk ini saya menggunakan BroadcastReceiver. Ketika Fragmen Dipilih Saya memulai metode Animasi dan menunjukkan Tampilan kepada Pengguna, Ketika Fragmen tidak Ditampilkan kepada Pengguna, saya mencoba untuk Tampilan Tak Terlihat ...
sumber
Silakan Coba Kode Ini untuk mengatasi masalah menyegarkan tampilan di Viewpager ....
sumber
untuk fungsi "instantiateItem", siapkan saja fragmennya, tetapi jangan memuat konten yang berat.
Gunakan "onPageChangeListener", sehingga setiap kali Anda membuka halaman tertentu, Anda memuat kontennya yang berat dan menampilkannya.
sumber
Saya memiliki masalah yang sama. Saya menemukan beberapa kode berguna di situs ini dan mengubahnya.
Min int untuk mViewPager.setOffscreenPageLimit (...); adalah 1, jadi meskipun Anda mengubahnya menjadi 0 Anda masih akan memiliki 2 halaman yang dimuat.
Hal pertama yang harus dilakukan adalah membuat sebuah int statis yang akan kita panggil maxPageCount dan mengganti metode FragmentStatePagerAdapter getCount () untuk mengembalikan maxPageCount:
Buat kemudian metode statis yang dapat diakses dari mana saja di program yang memungkinkan Anda untuk mengubah maxCount ini:
Sekarang inisialisasi maxPageCount ke 1. Kapan pun Anda mau, Anda dapat menambahkan halaman lain. Dalam kasus saya ketika saya membutuhkan pengguna untuk memperlakukan halaman saat ini terlebih dahulu sebelum menghasilkan yang lain. Dia melakukannya dan kemudian, tanpa masalah bisa menggesek ke halaman berikutnya.
Semoga membantu seseorang.
sumber
Gunakan // Buat boolean ini untuk mengambil data private boolean isViewShown = false;
sumber