TabLayoutMediator无限选项卡



我试图使用ViewPager2中的Tabs编写一个水平日期选择器,但遇到了TabLayoutMediator。这似乎是我试图实现的完美解决方案,但当我在TabLayouMediator上调用attach((时,如果有足够的选项卡,它会锁定主线程40或50ms。有办法解决这个问题吗?我希望它只加载和创建可见的选项卡,但它似乎会遍历所有项目,并为每个项目实例化选项卡。

这里有一个基本的例子:

...
val viewPagerAdapter = DemoCollectionAdapter(this)
val tabLayout = binding.tabLayout
val viewPager = binding.viewPager
viewPager.adapter = viewPagerAdapter
TabLayoutMediator(tabLayout, viewPager) { tab, position ->
tab.text = position.toString()
}.attach()
...
class DemoCollectionAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = 1000
override fun createFragment(position: Int): Fragment {
val fragment = DemoObjectFragment()
fragment.arguments = Bundle().apply {
putInt("arg", position + 1)
}
return fragment
}
}
class DemoObjectFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val binding = DailyBinding.inflate(inflater, container, false)
binding.positionTextView.text = requireArguments().getInt("arg").toString()
return binding.root
}
}

在滑动视图的文档中(https://developer.android.com/guide/navigation/navigation-swipe-view-2#add_tabs_using_a_tablayout),它说你可以有无限多的选项卡,但这似乎很奇怪,会锁定试图创建它们的主线程。

如有任何帮助,我们将不胜感激!

我最终使用了两个共同解决的viewpager

最新更新