hacer - tablayout android hive
android.support.design.widget.TabLayout seleccione la pestaƱa Programmatically (6)
Estoy usando android.support.design.widget.TabLayout. Tiene dos pestañas. Si el usuario selecciona la segunda pestaña En una condición particular, quiero que el usuario redirija a la primera pestaña y no permita que vaya a la pestaña simple hasta que la condición coincida. Para lograr esto intenté,
tabLayout.getTabAt(0).select();
pero no vuelve a seleccionar la primera pestaña
Así lo resolví:
tabLayout.getTabAt(CurrentItem).getCustomView().setSelected(true);
Esta es mi configuración. funciona bien para mi
//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);
}
No olvides inicializar el diseño de la pestaña de arriba.
Esto funcionó para mí:
int tabIndex = 2;
tabLayout.setScrollPosition(tabIndex,0f,true);
viewPager.setCurrentItem(tabIndex);
Esto se debe a que esa vista aún no se ha inicializado correctamente y está intentando realizar alguna acción.
Como solución, solo necesitas poner un hadler antes de seleccionar la pestaña especial .
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(yourTabIndex).select();
}
}, 100);
La respuesta de Mihir me dio una idea para probar esto. Parece que funciona sin el temporizador codificado, y también actualiza correctamente el desplazamiento para la pestaña seleccionada:
final TabLayout tabLayout = ...;
tabLayout.postOnAnimation(new Runnable() {
@Override
public void run() {
tabLayout.getTabAt(2).select();
}
});
Puede seleccionar la pestaña en Fragment.onViewCreated()
.