NullPointerException を発生させずに ViewPager OnPageChangeListener から Fragment メソッドを呼び出す方法

Patricia Arquette
リリース: 2024-11-03 09:08:29
オリジナル
537 人が閲覧しました

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

アクティビティから ViewPager Fragment メソッドにアクセスする

シナリオでは、複数の Fragment インスタンスを持つ ViewPager があり、GET を実行したいと考えています。

最初のアプローチ: setUserVisibleHint

setUserVisibleHint の使用は、次の場合にすぐにリクエストをトリガーするため、理想的ではありません。フラグメントが表示され、スワイプのスムーズなアニメーションが中断されます。

2 番目のアプローチ: OnPageChangeListener

OnPageChangeListener は、より適切なアプローチを提供します。ただし、onPageScrollStateChanged メソッドで sendGetRequest() を呼び出そうとすると、NullPointerException が発生します。

Solution

NullPointerException が発生するのは、フラグメント内の ViewPager の OnPageChangeListener。この場合のコンテキストは MainActivity ですが、これはフラグメントの操作には適切ではありません。

これを解決するには、代わりにフラグメントのコンテキストへの参照を渡す必要があります。改訂された 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 のフラグメント配列を使用して、現在の位置にあるフラグメントへの参照を取得します。次に、フラグメントを適切なタイプ (この場合は FragmentTwo) にキャストし、その sendGetRequest() メソッドを呼び出します。

このアプローチを使用すると、GET リクエストをトリガーし、取得したデータを目的のフラグメントに表示できます。スワイプアニメーションはスムーズに完了します。

以上がNullPointerException を発生させずに ViewPager OnPageChangeListener から Fragment メソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!