【发布时间】:2021-01-04 13:25:32
【问题描述】:
我正在使用 ViewPager2 和选项卡布局。这是我的MainFragment 代码-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.viewPager.adapter = MyPagerAdapter(requireActivity())
TabLayoutMediator(
binding.tabLayout, binding.viewPager
) { tab, position ->
binding.viewPager.setCurrentItem(0, true)
when (position) {
0 -> tab.text = “Tab A”
1 -> tab.text = “Tab B”
}
}.attach()
}
private class MyPagerAdapter(fragmentActivity: FragmentActivity) :
FragmentStateAdapter(fragmentActivity) {
private val items = 2
override fun getItemCount(): Int {
return items
}
override fun createFragment(position: Int): Fragment = when (position) {
0 -> FragmentA()
1 -> FragmentB()
else -> FragmentA()
}
}
我有 2 个问题在这里 -
-
override fun createFragment(position: Int): Fragment每次创建MainFragment视图时都会创建子片段的新实例。有没有办法重用已经存在的子片段实例? -
在我的导航图中,我有
MainFragment及其子FragmentA和FragmentB。为什么我不能使用导航操作从其父级打开子级?如果是,override fun createFragment(position: Int): Fragment需要返回 Fragment 而findNavController().navigate()不返回任何内容。我该怎么做?
【问题讨论】:
-
因此您想使用导航打开子片段,例如 FRAGMENT A 和 FRAGMENT B,作为 MAIN FRAGMENT 留在父片段中。
标签: android kotlin android-fragments android-architecture-navigation android-viewpager2