Modifier les éléments NavigationView lorsque l’utilisateur est connecté

L’activité principale de mon application comporte un tiroir de navigation, instancié dans le XML de cette manière:

 

Maintenant, l’entrée de menu pour le tiroir de navigation est la suivante:

         

Ce que je voudrais faire, c’est changer dynamicment le premier élément (et éventuellement les autres) sous certaines conditions. Par exemple, je voudrais changer l’entrée “Login” avec un “logout” une fois que l’utilisateur s’est connecté 😉

Comment puis-je y arriver? J’ai réussi à append un article au tiroir de cette façon

  Menu menu = navigationView.getMenu(); menu.add("Test"); 

mais ça ne me semble pas si bon, je suis à peu près sûr qu’il doit y avoir un moyen plus propre.

… mais ça le fait?

Je pense que la meilleure approche consiste à inclure tous vos éléments dans le menu et à modifier leur visibilité.

   

puis

 navigationView.getMenu().findItem(R.id.login).setVisible(false); navigationView.getMenu().findItem(R.id.logout).setVisible(true); 

Vous pouvez aussi le faire avec des groupes entiers d’éléments

  ...  

et

 navigationView.getMenu().setGroupVisible(R.id.group_1, true) 

Solution simple:
Ajoutez deux fichiers xml dans le répertoire du menu:

  1. navigation_with_login.xml Menu de navigation pour les utilisateurs connectés

              
  2. navigation_with_logout.xml Menu de navigation pour l’utilisateur par défaut:

              

Maintenant, vous pouvez modifier NavigationView éléments NavigationView , il suffit d’écrire quelques lignes de code.

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); if(islogin) { navigationView.getMenu().clear(); navigationView.inflateMenu(R.menu.navigation_with_login); } else { navigationView.getMenu().clear(); navigationView.inflateMenu(R.menu.navigation_with_logout); } 

Frst obtenir le menu de navigation

  NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); Menu menu = navigationView.getMenu(); 

Pour append le menu dynamicment

  if(loggedOut){ menu.add(R.id.submenu_others, R.id.action_logout, Menu.NONE, "logout"); } 

Voici menu.add (groupId, menuItemId, orderOfMenu, menuItem text)

  if(loggedIn){ menu.removeItem(R.id.action_logout); } 

Je l’ai fait, essayez ceci quand vous devez changer le titre:

 navigationView.getMenu().findItem(R.id.yourItemId).setTitle("my title"); 

J’espère que ça a aidé!