アクティビティから ViewPager フラグメントのメソッドを呼び出す方法

DDD
リリース: 2024-11-03 09:13:02
オリジナル
854 人が閲覧しました

How to Call Methods in ViewPager Fragments from Activity?

アクティビティから ViewPager フラグメント メソッドを呼び出す

指のスワイプが無効になっている ViewPager のコンテキストでは、個別のフラグメントでデータ フェッチ リクエストをトリガーする方法について疑問が生じました。専用ボタンでスワイプすると表示されます。

初期アプローチ

  1. setUserVisibleHint(): 最初に使用されましたが、アニメーションが関係するとラグが発生しました。
  2. OnPageChangeListener():ページの変更を監視するより良いアプローチ

問題

しかし、OnPageChangeListener() 内のフラグメントから sendGetRequest() メソッドを呼び出すと、NullPointerException が発生しました。

解決策

解決するには問題を解決してフラグメント参照を維持するには、アダプターをリファクタリングする必要があります。

フラグメント参照を含む PagerAdapter

各フラグメントへの参照を保持する PagerAdapter を導入します。

<code class="java">class PagerAdapter extends FragmentPagerAdapter {
    public Fragment[] fragments;

    // Instantiate fragments and add to array
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
        fragments[position] = createdFragment;
        return createdFragment;
    }
}</code>
ログイン後にコピー

からのフラグメントにアクセスしていますActivity

次に、アクティビティ内で、新しいフラグメントを作成する代わりに、参照されるフラグメントを使用します:

<code class="java">viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
        Fragment frag = mAdapter.fragments[position];
        if (frag != null &amp;&amp; frag instanceof FragmentTwo) {
            ((FragmentTwo)frag).sendGetRequest();
        }
    }
});</code>
ログイン後にコピー

ViewPager2 と Kotlin

ViewPager2 と Kotlin の場合、解決策は次のとおりです。類似:

<code class="kotlin">viewPager.registerOnPageChangeCallback(
    object: ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            val frag: Fragment = mAdapter.fragments[position]
            if (frag != null &amp;&amp; frag is FragmentTwo) {
                (frag as FragmentTwo).sendGetRequest()
            }
        }
    }
)</code>
ログイン後にコピー

注: 異なるフラグメント クラスを使用する場合は、sendGetRequest() メソッドを使用してインターフェイスを実装し、それを各フラグメントに実装してよりクリーンなソリューションを実現することを検討してください。

以上がアクティビティから ViewPager フラグメントのメソッドを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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