Я пытаюсь написать горизонтальный datepicker с помощью вкладок с ViewPager2 и наткнулся на TabLayoutMediator. Это кажется идеальным решением для того, что я пытаюсь выполнить sh, но когда я вызываю attach () в TabLayouMediator, он блокирует основной поток, в данном случае на 40 или 50 мс, если вкладок достаточно. Есть ли способ обойти это? Я надеялся, что он загрузит и создаст только видимые вкладки, но он, похоже, l oop по всем элементам и создает экземпляры вкладок для каждого.
Вот базовый c пример:
...
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) говорится, что у вас может быть бесконечное количество вкладок, но кажется странным, что это заблокирует основной поток, пытающийся создать их.
Любая помощь будет принята с благодарностью за sh это!