Akses Kaedah Pecahan ViewPager daripada Aktiviti
Dalam senario anda, anda mempunyai ViewPager dengan berbilang kejadian Fragmen dan anda ingin melakukan GET minta dan paparkan data yang diambil dalam Fragmen apabila ia kelihatan selepas meleret.
Pendekatan Pertama: setUserVisibleHint
Menggunakan setUserVisibleHint tidak sesuai kerana ia mencetuskan permintaan serta-merta apabila Fragment menjadi kelihatan, mengganggu animasi leret yang lancar.
Pendekatan Kedua: OnPageChangeListener
OnPageChangeListener menyediakan pendekatan yang lebih sesuai. Walau bagaimanapun, anda menghadapi NullPointerException apabila cuba memanggil sendGetRequest() dalam kaedah onPageScrollStateChanged.
Penyelesaian
NullPointerException berlaku kerana anda cuba menggunakan konteks daripada ViewPager's OnPageChangeListener dalam Fragmen. Konteks dalam kes ini ialah MainActivity, yang tidak sesuai untuk operasi Fragmen.
Untuk menyelesaikan masalah ini, anda perlu menghantar rujukan kepada konteks Fragmen sebaliknya. Berikut ialah OnPageChangeListener yang disemak:
<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { int currentPosition = 0; @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { currentPosition = position; } @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE && currentPosition != 0) { try { Fragment fragment = mAdapter.fragments[currentPosition]; if (fragment != null && fragment instanceof FragmentTwo) { ((FragmentTwo) fragment).sendGetRequest(); } } catch (Exception ex) { ex.printStackTrace(); } } } });</code>
Dalam kod ini, kami menggunakan tatasusunan serpihan FragmentAdapter untuk mendapatkan rujukan kepada Fragmen pada kedudukan semasa. Kami kemudian menghantar Fragmen kepada jenis yang sesuai (dalam kes ini, FragmentTwo) dan memanggil kaedah sendGetRequest()nya.
Menggunakan pendekatan ini, anda boleh mencetuskan permintaan GET dan memaparkan data yang diambil dalam Fragmen yang dikehendaki selepas animasi meleret selesai dengan lancar.
Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Fragmen daripada ViewPager OnPageChangeListener Tanpa NullPointerException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!