android - El icono de la pestaña seleccionada TabLayout no se selecciona al inicio:
tabs icons (5)
Estoy usando un TabLayout
para navegación con pestañas en mi aplicación. Tengo un problema realmente extraño, he creado 4 pestañas con este código:
private int[] tabIcons = {R.drawable.navigation_timeline_icon_selector, R.drawable.navigation_feed_icon_selector,
R.drawable.navigation_messages_icon_selector, R.drawable.navigation_notification_icon_selector};
TabLayout tabLayout = setTabLayout();
if (tabLayout != null) {
for (int i = 0; i < 4; i++) {
tabLayout.getTabAt(i).setIcon(tabIcons[i]);
}
}
cada uno de los elementos en tabIcon es un selector
con estados seleccionados y no seleccionados. Todos los selectores de iconos están configurados de la siguiente manera:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_selected="true"/>
<item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_pressed="true"/>
<item android:drawable="@drawable/navigation_timeline_icon" />
</selector>
El problema es que cuando la aplicación se inicia, la primera pestaña seleccionada (índice 0) no utiliza el ícono de estado seleccionado. En su lugar, utiliza el estado no seleccionado.
Para ser más explicativo aquí hay una captura de pantalla del problema, en el primer inicio mi pestaña se ve así:
cuando en cambio debería ser así:
Después de cambiar una página, todos los íconos vuelven a la funcionalidad completa y los estados seleccionados se seleccionan correctamente.
Traté de usar el TabLayout.Tab select()
pero el resultado es el mismo, el ícono que se usa es el ícono no seleccionado.
¿Alguien sabe qué puedo hacer para solucionarlo?
Gracias por adelantado.
Intente seleccionar la pestaña después de haberlas poblado.
TabLayout tabLayout = setTabLayout();
if (tabLayout != null) {
for (int i = 0; i < 4; i++) {
tabLayout.getTabAt(i).setIcon(tabIcons[i]);
}
tabLayout.getTabAt(0).select();
}
Prueba esto:
tabLayout.getTabAt(yourInitialPosition).getCustomView().setSelected(true);
Utilicé en mi pestaña el selector xml para los íconos con los siguientes estados:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/icon_ajuda_off"/>
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/icon_ajuda_on"/>
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/icon_ajuda_on"/>
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/icon_ajuda_on"/>
y en el código:
private int[] tabIcons = {R.drawable.ic_tab_sites, R.drawable.ic_tab_help,
R.drawable.ic_tab_profile, R.drawable.ic_tab_notification, R.drawable.ic_tab_search};
if (tabLayout != null) {
for (int i = 0; i < 5; i++) {
tabLayout.getTabAt(i).setIcon(tabIcons[i]);
}
}
Podría ayudar.
aquí hay una solución, pegue este código en usted en Crear actividad porque al usar pestañas 0 índice no se dispara directamente, esta es una manera fácil de hacerlo
viewPager.setCurrentItem(1);
if (viewPager.getCurrentItem()==1)
{
viewPager.setCurrentItem(0);
}
La respuesta correcta para la selección de pestañas en TabLayout
sería:
TabLayout.Tab currentTab = mTabs.getTabAt(selectedTab);
if (currentTab != null) {
View customView = currentTab.getCustomView();
if (customView != null) {
customView.setSelected(true);
}
currentTab.select();
}
donde currentTab.select()
moverá el indicador a la pestaña seleccionada, cuando customView.setSelected()
hará que todos los elementos en la vista personalizada configuren los estados seleccionados de los selectores como seleccionados.