Android — Отображение таблицы с помощью ViewPager2 отключает автофокусировку вкладки при нажатии

#android #android-viewpager #material-design #android-tablayout #android-viewpager2

Вопрос:

У меня есть TabLayout компонент компоновки материала, связанный с a ViewPager2 . Количество элементов(вкладок) достаточно велико, чтобы превышать размер экрана.

Я установил

 app:tabMode="scrollable"
 

но есть эффект, от которого я хочу избавиться. Если я проведу ViewPager2 пальцем по экрану нормально, TabLayout он обновится и перейдет на соответствующую вкладку.

Кроме того, если я нажму вкладку, которая находится на краю экрана, то TabLayout произойдет автоматическая прокрутка (автофокусировка) и на эту вкладку.

Я хочу отключить это событие автопрокрутки (автофокусировки). Я хочу, чтобы моя таблица прокручивалась только в том случае, если пользователь проводит по ней пальцем. Я не хочу, чтобы он автоматически развертывался, когда:

  1. Пользователи проводят пальцем по ViewPager2
  2. Пользователь нажимает на вкладку

В обоих этих случаях я просто хочу, чтобы представление вкладки обновлялось, но не выполнялось автоматически.

Я пытался:

 app:tabMode="fixed"
 

но так как у меня много вкладок, это не будет работать должным образом. Например, если я вручную прокручу свою TabLayout страницу до конца, а тем временем сохраню ViewPager2 ее на 2-й странице, а затем проведу пальцем по 3-й странице, это приведет TabLayout к сбросу фокуса в исходное состояние вместо того, чтобы просто оставаться на последней вкладке, где она была.

Это моя простая конфигурация:

 TabLayoutMediator(
        tabLayout,
        viewPager
    ) { tab, position ->

        // Setup tab view
    }.attach()

    tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
        override fun onTabSelected(tab: TabLayout.Tab?) {
            // Update view of selected tab
        }

        override fun onTabUnselected(tab: TabLayout.Tab?) {
            // Update view of unselected tab

        }

        override fun onTabReselected(tab: TabLayout.Tab?) {
            
        }

    })
 

Есть ли какой-либо способ добиться этого эффекта с помощью TabLayout или я должен использовать другой компонент?

Комментарии:

1. Создайте пользовательский TabLayout , более простой и удобный для управления. Создайте горизонтальное List / Scrollview , сдвиньте на ViewPager основе выбранного значения.