Mon tiroir de navigation affiche toujours le dernier élément sélectionné. Existe-t-il un moyen de le supprimer? Je veux que si l'utilisateur est sur la page d'accueil, les éléments du tiroir de navigation ne soient pas mis en surbrillance.
J'ai essayé
drawer.setSelected(false);
dans onResume (). Mais ça n'aide pas.
Veuillez vous référer à la capture d'écran ci-jointe, elle vous aidera à comprendre.
Utilisez le code ci-dessous:
navigationView.getMenu().getItem(0).setChecked(false);
Appelez cette méthode après avoir appelé setNavDrawer();
La méthode getItem(int index)
obtient le MenuItem
alors vous pouvez appeler la setChecked(true);
sur ce MenuItem
, tout ce qu'il vous reste à faire est de trouver quel élément l'index a la valeur par défaut et remplacez le 0 par cet index.
Vous pouvez sélectionner (mettre en surbrillance) l'élément en appelant:
onNavigationItemSelected(navigationView.getMenu().getItem(0));
Remarque: Pour nexus 4, prenez en charge la révision de la bibliothèque 24.0.0. Je recommande d'utiliser
navigationView.setCheckedItem(id);
En plus des solutions ci-dessus, si l'élément de groupe dans votre fichier tiroir_view.xml inclut l'attribut ci-dessous,
Android:checkableBehavior="single"
comme le montre l'exemple ci-dessous:
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<group Android:checkableBehavior="single" >
<item
... />
<item
... />
</group>
</menu>
aucune des solutions ci-dessus ne fonctionne. Assurez-vous donc que vous n'utilisez pas cet attribut si vous ne souhaitez pas cette fonction de surbrillance.
J'utilise
@Override
protected void onResume() {
super.onResume();
for (int i = 0; i < navigationView.getMenu().size(); i++) {
navigationView.getMenu().getItem(i).setChecked(false);
}
}
si cela n'a pas fonctionné, ajoutez également:
itemOfMenu.setChecked(false);
à la fin de la substitution de onNavigationItemSelected
.
Utilisez ceci:
navigationView.getCheckedItem().setChecked(false);
Ajoutant à la réponse de @ Zakir , si comme moi vous avez des sous-menus contenus dans votre NavigationView
, le code ci-dessus n'affecte aucun élément contenu dans lesdits sous-menus.
Pour résoudre ce problème, j'ai implémenté la méthode récursive ci-dessous pour effacer tous les éléments:
private void clearCheckedItems(Menu menu){
for (int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
if(item.hasSubMenu()){
clearMenuChecked(item.getSubMenu());
}else{
item.setChecked(false);
}
}
}
Si vous utilisez Kotlin, voici la réponse:
menuItem.isCheckable = false
Si vous regardez comment fonctionnent les applications Google, vous verrez la sélection au toucher. Pour ce faire, nous devons désélectionner le dernier élément sélectionné (ou tout simplement tous) lors de l'événement de fermeture du tiroir.
private int _selectedItemID = -1;
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
{
public void onDrawerClosed(View view)
{
super.onDrawerClosed(view);
NavigationView navigationView = (NavigationView)view;
Menu menu = navigationView.getMenu();
MenuItem menuItem = menu.findItem(_selectedItemID);
if(menuItem != null)
{
menuItem.setChecked(false);
}
}
public void onDrawerOpened(View drawerView)
{
super.onDrawerOpened(drawerView);
}
};
public boolean onNavigationItemSelected(MenuItem item)
{
// Handle navigation view item clicks here.
_selectedItemID = item.getItemId();
}