TabLayoutMediator 无限标签

TabLayoutMediator Infinite Tabs

我正在尝试使用 Tabs 和 ViewPager2 编写水平日期选择器,并遇到了 TabLayoutMediator。这似乎是我想要完成的完美解决方案,但是当我在 TabLayouMediator 上调用 attach() 时,如果有足够的选项卡,它将锁定主线程,在这种情况下为 40 或 50 毫秒。有没有办法解决?我希望它只会加载和创建可见的选项卡,但它似乎会遍历所有项目并为每个项目实例化选项卡。

这是一个基本示例:

...

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 来解决这个问题