Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Memanggil Kaedah Fragmen daripada ViewPager OnPageChangeListener Tanpa NullPointerException?

Patricia Arquette
Lepaskan: 2024-11-03 09:08:29
asal
537 orang telah melayarinya

How to Call a Fragment Method from a ViewPager OnPageChangeListener Without a NullPointerException?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!