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:
navigation_with_login.xml
Menu de navigation pour les utilisateurs connectés
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é!