首頁 > Java > java教程 > 如何從 ViewPager OnPageChangeListener 呼叫 Fragment 方法而不出現 NullPointerException?

如何從 ViewPager OnPageChangeListener 呼叫 Fragment 方法而不出現 NullPointerException?

Patricia Arquette
發布: 2024-11-03 09:08:29
原創
613 人瀏覽過

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

從Activity 存取ViewPager Fragment 方法

在您的場景中,您有一個具有多個Fragment 實例的ViewPager,並且您想要要執行GET請求並在Fragment 變得可見時顯示檢索到的資料

第一種方法:setUserVisibleHint

使用setUserVisibleHint 並不理想,因為它會在Fragment 可見時會立即觸發要求,中斷平滑的滑動動畫。

第二種方法: OnPageChangeListener

OnPageChangeListener 提供了更合適的方法。但是,當您嘗試在 onPageScrollStateChanged 方法中呼叫 sendGetRequest() 時,會遇到 NullPointerException。

解決方案

發生 NullPointerException 是因為您嘗試使用來自Fragment 內的 ViewPager 的 OnPageChangeListener。本範例中的上下文是 MainActivity,它不適合 Fragment 的操作。

要解決此問題,您需要傳遞對 Fragment 上下文的參考。以下是修改後的 OnPageChangeListener:

<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>
登入後複製

在這段程式碼中,我們使用 FragmentAdapter 的fragments 陣列來取得目前位置的 Fragment 的引用。然後,我們將 Fragment 轉換為適當的類型(在本例中為 FragmentTwo)並呼叫其 sendGetRequest() 方法。

使用此方法,您可以觸發 GET 請求並在所需的 Fragment 中顯示所取得的資料滑動動畫順利完成。

以上是如何從 ViewPager OnPageChangeListener 呼叫 Fragment 方法而不出現 NullPointerException?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板