このシナリオでは、6 つのフラグメントを持つ ViewPager がアクティビティ内に実装されます。フラグメント間のスワイプは無効になっているため、ボタンを使用して現在のフラグメントを変更します。 GET リクエストがサーバーに送信され、スワイプが完了すると応答データが各フラグメントに表示されます。
最初のアプローチ (setUserVisibleHint を使用)
最初に、 setUserVisibleHint メソッドを使用して、フラグメントが表示されるたびに GET リクエストをトリガーしました。ただし、このアプローチでは、リクエストが即時に実行されるため、スワイプ アニメーションに遅れが生じました。
2 番目のアプローチ (OnPageChangeListener を使用)
アニメーション ラグを克服するには、OnPageChangeListener が ViewPager に追加されました。このリスナーは、ページのスクロール状態を追跡し、目的のフラグメントが完全に表示されたとき (つまり、スクロール状態が IDLE に等しいとき) に GET リクエストを送信します。
問題と解決策
2 番目の方法はうまくいきましたが、sendGetRequest() の実行時に NullPointerException が発生しました。これは、フラグメント参照が適切に取得されていなかったためです。これを解決するには、FragmentPagerAdapter の instantiateItem メソッドにフラグメントへの参照を保存する必要がありました。次に、OnPageChangeListener 内で、新しいフラグメントを作成する代わりに、ViewPagerPagerAdapter から参照されるフラグメントを使用できます。
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 && frag is FragmentTwo) { (frag as FragmentTwo).sendGetRequest() } } } )</code>
ここで、mAdapter は ViewPager2 内で使用される FragmentPagerAdapter を指します。
以上がアクティビティから ViewPager フラグメントのメソッドにアクセスして実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。