例えばActivity側で定義されたActionBarやToolBarのUIで操作が行われた時、ViewPager側のFragmentを操作する必要がある時等に。
Activity側
FragmentPagerAdapter.getItem(position)
でFragmentを取得すればよい。positionはViewPager.currentItem
で取得できる。
val viewPager = findViewById<ViewPager>(R.id.viewPager) val mFragmentPagerAdapter = object : FragmentPagerAdapter(supportFragmentManager){ ... 略 } ... val i = viewPager.currentItem //currentのfragmentを取得 val fragment = mFragmentPagerAdapter.getItem(i) as ViewPagerFragment //fragmentにアクセス fragment.doAction()
Fragment側
Fragment側はActivityから実行されるメソッドをインターフェースとしておけばアクセスインスタンスを抽象化できる
interface ViewPagerFragment { fun doAction() } Foo : Fragment(), ViewPagerFragment{ override fun doAction(){} }
ただし、FragmentPagerAdapter.getItem(position)
で取得したFragmentの状態によって、メンバで保持してるインスタンス等破棄されているケースがある。特にlateinit var のメンバにアクセスしたりするとぬるぽになる時があるので注意しよう。