TabLayoutMediator Бесконечные вкладки - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь написать горизонтальный 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 это!

...