Как мне выбрать вкладку в TabLayout программно?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Как мне выбрать вкладку в TabLayout программно?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Если вам известен индекс вкладки, которую вы хотите выбрать, вы можете сделать это так:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
TabLayout.Tab tab = tabLayout.getTabAt(someIndex);
tab.select();
Этот метод работает, даже если вы используете TabLayout сам по себе без ViewPager (что нетипично, и, вероятно, это плохая практика, но я видел, как это было сделано).
TabLayout.Tab.select()
: «Выберите эту вкладку. Действителен, только если вкладка была добавлена на панель действий».Вот как я это решил:
источник
Использовать это:
источник
Objects.requireNonNull(tabs.getTabAt(position)).select();
безопасно использоватьИспользовать это:
После в OnClickListener:
источник
Это, вероятно, не окончательное решение , и оно требует, чтобы вы использовали
TabLayout
вместе с aViewPager
, но я решил это так:Я проверил, насколько велико влияние производительности на использование этого кода, сначала посмотрев на мониторы ЦП и памяти в Android Studio при запуске метода, а затем сравнив его с нагрузкой, которая была загружена на ЦП и память при переходе между страницами. я (используя жесты), и разница не так уж велика, так что, по крайней мере, это не ужасное решение ...
Надеюсь, это поможет кому-то!
источник
tabLayout.setScrollPosition(pageIndex,0f,true);
), когда нажимал на вкладку справа, он не обновлял страницу ViewPager (я не знаю почему). Только щелкнув обратно на левой вкладке и затем снова на правой вкладке, наконец, обновится страница, чтобы получить страницу правой вкладки, что очень глючно. Но у этого решения не было глюков.Если вы не можете использовать tab.select () и не хотите использовать ViewPager, вы все равно можете программно выбрать вкладку. Если вы используете настраиваемое представление,
TabLayout.Tab setCustomView(android.view.View view)
это проще. Вот как это сделать в обоих направлениях.Если вы не используете пользовательский вид, то вы можете сделать это следующим образом
Используйте StateListDrawable для переключения между выбранными и невыбранными объектами рисования или чем-то подобным, чтобы делать то, что вы хотите, с цветами и / или рисунками.
источник
Просто установите
viewPager.setCurrentItem(index)
и соответствующий TabLayout выберет соответствующую вкладку.источник
Вы можете попробовать решить это с этим:
источник
Немного поздно, но может быть полезным решением. Я использую свой TabLayout прямо в своем фрагменте и пытаюсь выбрать вкладку довольно рано в жизненном цикле фрагмента. Для меня работало подождать, пока TabLayout не закончит рисование своих дочерних представлений с помощью
android.view.View#post
метода. то есть:источник
new Handler().postDelayed(()->{ tabLayout.post(() -> { tabLayout.getTabAt(myPosition).select(); }); },200);
попробуй это
источник
Я имею в использовании TabLayout для переключения фрагментов. Это работает по большей части, за исключением того, что всякий раз, когда я пытался выбрать вкладку программным способом
tab.select()
, мойTabLayout.OnTabSelectedListener
вызовonTabSelected(TabLayout.Tab tab)
бы вызвал, что вызвало бы у меня много горя. Я искал способ сделать программный выбор без запуска слушателя.Поэтому я адаптировал ответ @kenodoggy к своему использованию. Кроме того, я столкнулся с проблемой, когда некоторые из внутренних объектов возвращали бы ноль (потому что они еще не были созданы, потому что я отвечал
onActivityResult()
из своего фрагмента, что происходит раньшеonCreate()
в случае, если действиеsingleTask
илиsingleInstance
), поэтому я написал подробный / else последовательность, которая сообщит об ошибке и провалится без тогоNullPointerException
, что в противном случае сработало бы. Я использую Timber для регистрации, если вы не используете эту замену сLog.e()
.Здесь tabLayout - моя переменная памяти, связанная с
TabLayout
объектом в моем XML. И я не использую функцию вкладки прокрутки, поэтому я также удалил ее.источник
Вы должны использовать viewPager, чтобы использовать viewPager.setCurrentItem ()
источник
добавить для вашего просмотра:
// на обработчике, чтобы предотвратить падение памяти
источник
Комбинированное решение из разных ответов:
источник
С
TabLayout
помощью библиотеки компонентов материалов просто используйтеselectTab
метод:Требуется версия 1.1.0.
источник
По умолчанию, если вы выберете вкладку, она будет выделена. Если вы хотите выбрать Явно, значит используйте данный закомментированный код в onTabSelected (TabLayout.Tab tab) с указанным вами указателем позиции вкладки. Этот код объясняет об изменении фрагмента на выбранной позиции вкладки с помощью viewpager.
источник
Это тоже может помочь
источник
Если так получилось, что ваша вкладка по умолчанию является первой (0), и вы случайно переключаетесь на фрагмент, то вы должны вручную заменить фрагмент в первый раз. Это потому, что вкладка выбирается до того, как слушатель будет зарегистрирован.
В качестве альтернативы вы можете рассмотреть возможность вызова
getTabAt(0).select()
и переопределенияonTabReselected
следующим образом:Это будет работать, потому что вы по существу заменяете фрагмент на каждой вкладке, повторно выбирая.
источник
Вы можете установить положение TabLayout, используя следующие функции
источник
Если у вас есть проблемы с пониманием, этот код может помочь вам
Вы также можете добавить это в свой код:
источник
Попробуйте так.
источник
если вы используете TabLayout без ViewPager, это помогает
источник
Kotlin исправить
viewPager.currentItem = 0
tabs.setupWithViewPager (ViewPager)
источник
это выберет вкладку как просмотр страницы
источник