1. ホーム
  2. android

フラグメントビューがユーザーに表示されているかどうかをテストするには?

2023-12-15 22:44:52

質問

ViewPagerがあり、各ページはFragmentビューです。あるフラグメントが可視領域にあるかどうかをテストしたいのですが、Fragment.isVisibleのテストのみです。

  • フラグメントがアクティビティにアタッチされている
  • フラグメントが可視に設定されている
  • フラグメントはビューに追加されました。

ViewPagerは3つの(デフォルトで)フラグメントを作成し、それらの3つすべてが上記の条件を満たしますが、1つだけが実際にユーザーに見える状態です(人間の の目 )

どのように解決するのですか?

確かにもっといい方法がありますね!

を見てみましょう。 FragmentPagerAdapter を見てみましょう。 の javadoc を見てください。 setPrimaryItem(ViewGroup container, int position, Object object):void があり、まさにあなたが必要とすることを行っています。

javadocから

public void setPrimaryItem (ViewGroup container, int position, Object object)

現在、どの項目が主であるとみなされているかをアダプタに通知するために呼び出されます。 どの項目が現在quot;primary"であるとみなされるか、つまり、現在のページとしてユーザーに表示されるものを知らせるために呼び出されます。 ページとしてユーザーに表示されるものです。

パラメータ container ページが削除されるViewを含む。 position 現在プライマリであるページ位置。 object instantiateItem(View.View)によって返されたものと同じオブジェクト。 int)によって返されたものと同じオブジェクトです。

スクロール状態に関する注意

これを実装し、デバッグを開始して、正確にいつこれが呼び出されるかを感じ取ることができれば、フラグメントの準備中とユーザーがスワイプしている間に何度もこれが起動することにすぐに気がつくでしょう。

そのため、このメソッドに ViewPager.OnPageChangeListenerを追加するのがよいでしょう。 を追加し、ビューページャーのスクロール状態が scoll_state_idle になったときにのみ、必要なことを行います。