watabee's blog

プログラミング関連のブログです

【Android】ViewPagerでページ切り替え時にFragmentのonResumeが呼ばれるようになった!

androidx.fragment の 1.1.0-alpha07 から ViewPager のページを切り替えたタイミングで Fragment の onResume() が呼ばれるようになりました🎉

ViewPager ではとあるページを表示した際にデフォルトで両隣のページの Fragment も自動的に生成されるため、今までは画面に Fragment が表示されていないのにも関わらず隣のページの Fragment の onResume() が呼ばれてしまっていました。

個人的にはこの機能は欲しかったやつで、Google Analytics で画面表示時にスクリーンイベントを送りたい、といった場合に簡単に実装することができるようになるので嬉しい限りです!!

(今までは setUserVisibleHint() を使ってごにょごにょしてました...)

使い方

サンプルプロジェクトを こちら にアップしています。

この機能を有効にする方法ですが、FragmentPagerAdapterFragmentStatePagerAdapter に新しくコンストラクタが追加されました。

// FragmentPagerAdapter
public FragmentPagerAdapter(@NonNull FragmentManager fm, @Behavior int behavior)

// FragmentStatePagerAdapter
public FragmentStatePagerAdapter(@NonNull FragmentManager fm, @Behavior int behavior)

上記の behavior に設定できる値は現時点で2つあります。

  • USE_SET_USER_VISIBLE_HINT
  • RESUME_ONLY_CURRENT_FRAGMENT

前者は今まで通り、ページを切り替えるたびに Fragment の setUserVisibleHint() メソッドが呼ばれる挙動になります。

後者を設定することによって、先ほど紹介したページを切り替えるたびに Fragment の onResume() メソッドが呼ばれる挙動になり、setUserVisibleHint() メソッドは呼び出されなくなります。

(ちなみに setUserVisibleHint() メソッドは Deprecated になりました)