【发布时间】:2020-03-19 07:02:11
【问题描述】:
我正在使用ViewPager2、FragmentStateAdapter 和TabLayout 创建选项卡式布局。我的 TabLayout 和 ViewPager2 在 Fragment 中,并且适配器有一个列表,其中包含另外两个用于选项卡的片段。当我使用调试器或在日志语句中时,永远不会调用每个片段的 OnCreateView。 createFragment 也永远不会在选项卡适配器中调用
MainTabHolderFragment:片段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val tabAdapter = TabAdapter(childFragmentManager, lifecycle)
tabAdapter.addFragment(AddItemFragment(), "Add Item")
tabAdapter.addFragment(WishListFragment(), "Wish List")
binding.viewPager.adapter = tabAdapter
TabLayoutMediator(
binding.tabLayout, binding.viewPager,
TabLayoutMediator.TabConfigurationStrategy { tab, position ->
tab.text = tabAdapter.getPageTitle(position)
Timber.d("tab = ${tab.position}, pos = $position")
binding.viewPager.setCurrentItem(position, true)
}).attach()
}
TabAdapter
class TabAdapter(fm: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fm, lifecycle) {
private val fragmentList = mutableListOf<FragmentListItem>()
override fun createFragment(position: Int) = fragmentList[position].fragment
override fun getItemCount() = fragmentList.size
fun addFragment(fragment: Fragment, title: String) {
fragmentList.add(FragmentListItem(fragment, title))
}
fun getPageTitle(position: Int): CharSequence? = fragmentList[position].title
private data class FragmentListItem(val fragment: Fragment, val title: String)
}
TabLayoutMediator 中的tab.postion 变量始终为-1,ViewPager 永远不会对fragment 进行膨胀,导致tab 布局下出现黑屏。我需要使用TabLayoutMediator 或FragmentStateAdapter 以外的其他内容吗?
编辑:添加了说明 createFragment 未调用的信息
【问题讨论】:
标签: android android-fragments kotlin android-viewpager