¿Cómo desmarcar los elementos seleccionados en la vista de navegación?
Sé que es posible resaltar un elemento de vista de navegación llamando a setCheckedItem()
o devolver el valor verdadero en onNavigationItemSelected
para mostrar el elemento como el elemento seleccionado, pero ¿Cómo puedo desmarcar los elementos onNavigationItemSelected
de una vista de navegación?
- Cómo configurar el recuento de notificaciones no leídas en NavigationView de DrawerLayout?
- NavigationView obtener / buscar el diseño del encabezado
- ¿Cómo crear un divisor simple en el nuevo NavigationView?
- Agregar hijo a un MenuItem dentro de un grupo en un NavigationView
- ¿Cómo personalizar el fondo del elemento y el color del texto del elemento dentro de NavigationView?
- NavigationView diapositiva desde la derecha
- NavigationView no está visible pero el clic de artículo está funcionando
- NavigationView onClick de xml provoca errores
- Elementos del menú de NavigationView con el contador a la derecha
- ¿Cómo diseñar el NavigationView de la biblioteca de soporte de diseño?
- Horarios de reciclaje en DrawerLayout
- Cómo obtener divisores en el menú de NavigationView sin títulos?
- ¿Agregar MenuItem a NavigationView con el icono y el título?
Esto desmarcará todos los elementos
int size = mNavigationView.getMenu().size(); for (int i = 0; i < size; i++) { mNavigationView.getMenu().getItem(i).setChecked(false); }
Vi @arsent solución y le dio un intento, y de hecho hará lo que quieras, que es para desmarcar todos los elementos … pero, estaba teniendo un problema en el siguiente escenario:
- Seleccione la opción de menú 1 (usando
NavigationView#setCheckedItem
) - Deseleccionar todos los elementos según la solución de @ arsent
- Vuelva a seleccionar el elemento de menú 1 (utilizando
NavigationView#setCheckedItem
)
En este escenario, el elemento 1 no se marcará como marcado. Esto se debe a que internamente la vista de navegación mantiene un seguimiento del elemento seleccionado previamente en el paso 1, que no cambia en el paso 2, y simplemente salta el paso 3 porque el elemento seleccionado anteriormente es el mismo que el que estamos seleccionando ahora.
Mi sugerencia (y una solución alternativa) para evitar esto es simplemente tener un elemento ficticio invisible y usar NavigationView#setCheckedItem
para seleccionar ese elemento siempre que quieras NavigationView#setCheckedItem
selección de todo, como por ejemplo
<item android:id="@+id/menu_none" android:title="" android:visible="false"/>
Para desmarcar todo solo hazlo
mNavigationView.setCheckedItem(R.id.menu_none);
Para desmarcar todos los elementos de SubMenu
incluidos los elementos de SubMenu
, debe utilizar la recursión:
private void unCheckAllMenuItems(@NonNull final Menu menu) { int size = menu.size(); for (int i = 0; i < size; i++) { final MenuItem item = menu.getItem(i); if(item.hasSubMenu()) { // Un check sub menu items unCheckAllMenuItems(item.getSubMenu()); } else { item.setChecked(false); } } }
Llame al método anterior para desmarcar todos los elementos, como a continuación –
unCheckAllMenuItems(navigationView.getMenu());
Las soluciones de Joao no funcionaron para mí como totalmente esperado. Esto conduciría a un espacio en blanco de la vista de elemento sin marcar en mi Navegación.
Sólo asegúrese de establecer la vista como desaparecido:
<item android:id="@+id/your_menu_item_id_to_hide" android:title="" android:visible="false"/> bottomNavigationView.getMenu().findItem(R.id.your_menu_item_id_to_hide).setChecked(true); bottomNavigationView.findViewById(R.id.your_menu_item_id_to_hide).setVisibility(View.GONE);
La solución Arsent no es necesaria en este caso.
Todo lo que necesitas hacer es rodear tus grupos de esta manera:
<group> <group android:id="@+id/grp1"> <item android:id="@+id/nav_profile" android:icon="@drawable/ic_account_circle_24dp" android:title="@string/profile" /> </group> <group android:id="@+id/grp2"> <item android:id="@+id/nav_settings" android:icon="@drawable/ic_settings_24dp" android:title="@string/settings" /> <item android:id="@+id/nav_help" android:icon="@drawable/topic_help" android:title="@string/help_feedback" /> </group> </group>
No es necesario hacer bucle de elementos de menú con la sobrecarga añadida!
- Cómo asignar coordenadas de marco a superposición en la visión
- Android 8 o superior: comprobar los servicios de Google Play