ViewPager2
默认会给 Fragment 分配标签,比如:
第一个位置的 Fragment 的标签是 "f0"
第二个位置的 Fragment 的标签是 "f1"
第三个位置的 Fragment 的标签是 "f2"
,以此类推…… 因此你可以获取你的 Fragment 的标签,并将 "f" 和你的 Fragment 位置连接起来。要获取当前 Fragment,您可以从 ViewPager2 位置获取当前位置并像这样创建您的标签(对于 Kotlin):
val myFragment = supportFragmentManager.findFragmentByTag("f" + viewpager.currentItem)
在特定位置的片段
val myFragment = supportFragmentManager.findFragmentByTag("f" + position)
如果您使用此技术,可以转换 Fragment 并始终检查其是否不为 null。
如果您将 ViewPager2 托管在 Fragment 中,请改用 childFragmentManager
。
请记住:
如果您已经 重写
了适配器中的 getItemId(position: Int)
方法,则情况有所不同。它应该是:
val myFragment = supportFragmentManager.findFragmentByTag("f" + your_id_at_that_position)
或者简单来说:
val myFragment = supportFragmentManager.findFragmentByTag("f" + adapter.getItemId(position))
如果您将ViewPager2放在Fragment中,则使用
childFragmentManager
而不是
supportFragmentManager
。
fragmentManager.findFragmentById(getItemId(index).toInt())
from within theFragmentStateAdapter
seems to work but only after the fragment has been added. From the docs this may not work though if the fragments are moved.Default implementation works for collections that don't add, move, remove items
- Markymark