J'utilise Android.support.design.widget.TabLayout. Il a deux onglets. Si l'utilisateur sélectionne le deuxième onglet. Dans une condition particulière, je veux que l'utilisateur redirige vers le premier onglet et lui interdise d'accéder à l'onglet sencond jusqu'à ce que la condition corresponde. Pour y parvenir, j'ai essayé,
tabLayout.getTabAt(0).select();
mais il ne resélectionne pas le premier onglet
Cela est dû au fait que cette vue n'est toujours pas initialisée correctement et que vous essayez d'effectuer une action.
Comme solution, il vous suffit d'en mettre un hadler avant de sélectionner l'onglet perticulaire.
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
Voici comment je l'ai résolu:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
Cela a fonctionné pour moi:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
Ceci est ma configuration. fonctionne bien pour moi.
//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);
}
n'oubliez pas d'initialiser la disposition de vos onglets ci-dessus.
tabLayout.getTabAt(index specific).select();
Vous pouvez sélectionner l'onglet dans Fragment.onViewCreated()
.