如何使用带有 ViewPager2 的 FragmentStateAdapter 的位置获取片段
How to get a fragment using position from a FragmentStateAdapter with ViewPager2
我正在使用 ViewPager2
和 FragmentStateAdapter
来创建片段集合。我想根据其在适配器中的位置访问特定片段。我怎样才能达到同样的效果?
您可以使用片段管理器的 findFragmentByTag("f$id")
通过 ID 获取片段
但要做到这一点,您需要将 FragmentStateAdapter
中的 getItemId()
覆盖到 return 位置,这样 id 现在等于位置。
override fun getItemId(position: Int): Long {
return position.toLong()
}
然后获取一个位置的片段:
- 如果
ViewPager2
由 activity 托管,请使用 supportFragmentManager
:
fun getPageFragment(id: Long): Fragment? {
return supportFragmentManager.findFragmentByTag("f$id")
}
- 如果它由片段托管,请使用
childFragmentManager
:
fun getPageFragment(id: Long): Fragment? {
return childFragmentManager.findFragmentByTag("f$id")
}
我正在使用 ViewPager2
和 FragmentStateAdapter
来创建片段集合。我想根据其在适配器中的位置访问特定片段。我怎样才能达到同样的效果?
您可以使用片段管理器的 findFragmentByTag("f$id")
但要做到这一点,您需要将 FragmentStateAdapter
中的 getItemId()
覆盖到 return 位置,这样 id 现在等于位置。
override fun getItemId(position: Int): Long {
return position.toLong()
}
然后获取一个位置的片段:
- 如果
ViewPager2
由 activity 托管,请使用supportFragmentManager
:
fun getPageFragment(id: Long): Fragment? {
return supportFragmentManager.findFragmentByTag("f$id")
}
- 如果它由片段托管,请使用
childFragmentManager
:
fun getPageFragment(id: Long): Fragment? {
return childFragmentManager.findFragmentByTag("f$id")
}