¿Cómo debo seleccionar una pestaña en TabLayout mediante programación?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
¿Cómo debo seleccionar una pestaña en TabLayout mediante programación?
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
Si conoce el índice de la pestaña que desea seleccionar, puede hacerlo así:
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
TabLayout.Tab tab = tabLayout.getTabAt(someIndex);
tab.select();
Esta técnica funciona incluso si está usando el TabLayout por sí solo sin un ViewPager (que es atípico, y probablemente sea una mala práctica, pero lo he visto hecho).
TabLayout.Tab.select()
: "Seleccione esta pestaña. Solo válido si la pestaña se ha agregado a la barra de acción".Así es como lo resolví:
fuente
Utilizar este:
fuente
Objects.requireNonNull(tabs.getTabAt(position)).select();
seguro de usarUtilizar este:
Después en OnClickListener:
fuente
Probablemente esta no sea la solución definitiva , y requiere que uses el
TabLayout
junto con unViewPager
, pero así es como lo resolví:Probé cuán grande es el impacto en el rendimiento del uso de este código mirando primero los monitores de CPU y memoria en Android Studio mientras ejecutaba el método, luego comparándolo con la carga que se puso en la CPU y la memoria cuando navegaba entre las páginas yo mismo (usando gestos de deslizamiento), y la diferencia no es significativamente grande, así que al menos no es una solución horrible ...
¡Espero que esto ayude a alguien!
fuente
tabLayout.setScrollPosition(pageIndex,0f,true);
), cuando hice clic en la pestaña a la derecha, no actualizó la página de ViewPager (no sé por qué). Solo hacer clic de nuevo en la pestaña izquierda y luego en la pestaña derecha nuevamente actualizaría finalmente la página para que tenga la página de la pestaña derecha, lo cual es muy problemático. Pero esta solución no tenía problemas técnicos.Si no puede usar tab.select () y no quiere usar un ViewPager, aún puede seleccionar una pestaña mediante programación. Si está utilizando una vista personalizada
TabLayout.Tab setCustomView(android.view.View view)
, es más simple. Aquí se explica cómo hacerlo en ambos sentidos.Si no está utilizando una vista personalizada, puede hacerlo así
Use un StateListDrawable para alternar entre elementos de dibujo seleccionados y no seleccionados o algo similar para hacer lo que quiera con colores y / o elementos de diseño.
fuente
Simplemente configure
viewPager.setCurrentItem(index)
y el TabLayout asociado seleccionaría la pestaña respectiva.fuente
Puedes intentar resolverlo con esto:
fuente
prueba esto
fuente
Un poco tarde pero podría ser una solución útil. Estoy usando mi TabLayout directamente en mi Fragmento e intento seleccionar una pestaña bastante temprano en el Ciclo de vida del Fragmento. Lo que funcionó para mí fue esperar hasta que TabLayout terminara de dibujar sus vistas secundarias mediante el
android.view.View#post
método. es decir:fuente
new Handler().postDelayed(()->{ tabLayout.post(() -> { tabLayout.getTabAt(myPosition).select(); }); },200);
Yo estoy usando TabLayout para cambiar fragmentos. Funciona en su mayor parte, excepto que cada vez que intentaba seleccionar una pestaña mediante programación
tab.select()
, miTabLayout.OnTabSelectedListener
activaba elonTabSelected(TabLayout.Tab tab)
, lo que me causaba mucho dolor. Estaba buscando una manera de hacer una selección programática sin activar al oyente.Así que adapté la respuesta de @kenodoggy a mi uso. Además, me enfrentaba a un problema en el que algunos de los objetos internos volverían nulos (porque aún no se habían creado, porque estaba respondiendo
onActivityResult()
desde mi fragmento, que ocurre antesonCreate()
en el caso de que la actividad seasingleTask
osingleInstance
), así que escribí un detallado si / otra secuencia que informaría el error y se caería sin laNullPointerException
que de otra forma se dispararía Uso Timber para iniciar sesión, si no estás usando ese sustitutoLog.e()
.Aquí, tabLayout es mi variable de memoria vinculada al
TabLayout
objeto en mi XML. Y no uso la función de pestaña de desplazamiento, así que también la eliminé.fuente
debes usar viewPager para usar viewPager.setCurrentItem ()
fuente
agregar para su visor:
// en el controlador para evitar accidentes fuera de memoria
fuente
Una solución combinada de diferentes respuestas es:
fuente
Con lo
TabLayout
proporcionado por la Biblioteca de componentes de material, simplemente use elselectTab
método:Requiere la versión 1.1.0.
fuente
Por defecto, si selecciona una pestaña, se resaltará. Si desea seleccionar explícitamente significa usar el código comentado dado en onTabSelected (pestaña TabLayout.Tab) con su posición de índice de pestaña especificada. Este código explicará el fragmento de cambio en la posición seleccionada de la pestaña usando el visor.
fuente
Esto también puede ayudar
fuente
Si resulta que su pestaña predeterminada es la primera (0) y cambia a un fragmento, debe reemplazar el fragmento manualmente por primera vez. Esto se debe a que la pestaña se selecciona antes de que el oyente se registre.
Alternativamente, puede considerar llamar
getTabAt(0).select()
y anularonTabReselected
así:Esto funcionaría porque esencialmente está reemplazando el fragmento en cada pestaña nuevamente seleccionada.
fuente
Puede establecer la posición de TabLayout utilizando las siguientes funciones
fuente
Si tiene problemas para comprender, este código puede ayudarlo
También puede agregar esto a su código:
fuente
Intenta de esta manera.
fuente
si está usando TabLayout sin viewPager, esto ayuda
fuente
Kotlin Fix
viewPager.currentItem = 0
tabs.setupWithViewPager (viewPager)
fuente
esto seleccionará la pestaña como ver la página de deslizamiento del localizador
fuente