Android.support.design.widget.TabLayout выберите вкладку Programmatically
Я использую android.support.design.widget.TabLayout.
Он имеет две вкладки,
Если пользователь выбирает вторую вкладку. В определенном состоянии я хочу, чтобы пользователь перенаправлялся на первую вкладку и запрещал ему переходить на вкладку sencond до тех пор, пока не будет выполнено условие.
Для этого я попробовал,
tabLayout.getTabAt(0).select();
но он не будет повторно выбирать первую вкладку
Ответы
Ответ 1
Это связано с тем, что это представление по-прежнему не соответствует инициализировано, и вы пытаетесь выполнить какое-либо действие.
В качестве решения вам нужно просто поставить одного hadler перед тем, как выбрать perticular tab.
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
Ответ 2
Вот как я это решил:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
Ответ 3
Это сработало для меня:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
Ответ 4
Вы можете выбрать вкладку в Fragment.onViewCreated()
.
Ответ 5
Это моя настройка. отлично работает для меня.
//declare your tabs to be add on
TabLayout tlDailyView;
private TabLayout.Tab tabAppointment, tabSlots;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_daily_view, container, false);
initializeMembers();
setupTabLayout();
return view;
}
private void setupTabLayout() {
tlDailyView.addTab(tabAppointment, 0, true);
tlDailyView.addTab(tabSlots, 1, true);
tlDailyView.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()) {
case 0:
//open fragment at position 0 here
case 1:
//open fragment at position 1 here
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
private void initializeMembers() {
tabSlots = tlDailyView.newTab();
tabAppointment = tlDailyView.newTab();
tabAppointment.setText(R.string.tab_appts).select();
tabSlots.setText(R.string.tab_slots);
}
не забудьте инициализировать ваш план табуляции выше.
Ответ 6
tabLayout.getTabAt(index specific).select();
Ответ 7
Слишком поздно, но это может помочь другим разработчикам.
Если вы зайдете внутрь и увидите, как tabLayout.getTabAt(tabIndex).select();
был реализован внутри. Вы узнаете, что он отправляет ваш поток в
onTabReselected(tab: TabLayout.Tab?)
и ваш поток не переходит на
onTabSelected(tab: TabLayout.Tab?)
если ваша текущая вкладка и tabIndex совпадают. Так что это очень важно учитывать.
Ответ 8
Ответ Михира дал мне идею попробовать это. Похоже, он работает без жесткого таймера, а также корректно обновляет прокрутку для выбранной вкладки:
final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
@Override
public void run() {
tabLayout.getTabAt(2).select();
}
});