viewpager tablayout tab hacer google como attach addtab android android-tablayout

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() .