Je veux construire NavigationDrawer
avec la possibilité d'ajouter de nouveaux éléments (comme l'application météo yahoo avec l'ajout de nouvelles villes). Je travaille NavigationDrawer
avec NavigationView
, dans le menu j'ai des champs permanents:
<group
Android:id="@+id/group"
Android:checkableBehavior="single">
<item
Android:checked="false"
Android:id="@+id/item1"
Android:icon="@drawable/ic_inbox_black_24dp"
Android:title="Item1" />
<item
Android:checked="false"
Android:id="@+id/Item2"
Android:icon="@drawable/ic_inbox_black_24dp"
Android:title="Item2"
/>
</group>
J'essaie d'ajouter un nouvel élément cette méthode:
public boolean addNewItem(String itemName){
Menu menu = navigationView.getMenu();
menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName);
return true;
}
Et je ne reçois pas exactement ce que je veux:
Quelqu'un at-il une idée de la façon de résoudre ce problème? Ou pourquoi cela se produit-il? Je ne sais pas où et comment on peut conserver des informations sur les éléments ajoutés. Des idées?
Pour ajouter l'élément par programme, nous pouvons obtenir un objet Menu à l'aide de la méthode getMenu()
de NavigationView
, puis nous pouvons ajouter des éléments dans le tiroir de navigation à l'aide de cet objet Menu
.
final Menu menu = navigationView.getMenu();
for (int i = 1; i <= 3; i++) {
menu.add("Runtime item "+ i);
}
En utilisant SubMenu
, nous pouvons y ajouter une sous-section et des éléments.
// adding a section and items into it
final SubMenu subMenu = menu.addSubMenu("SubMenu Title");
for (int i = 1; i <= 2; i++) {
subMenu.add("SubMenu Item " + i);
}
pour plus de détails Cochez TechnoTalkative .
EDIT: Si vous souhaitez interagir avec le menu, utilisezmenu.add(0, itemId, 0, title);
puis
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
id vous donnera assigné itemId
Supposons que vous ayez deux groupes, groupe1 et groupe2. Si vous souhaitez ajouter dynamiquement des éléments au groupe1, vous pouvez attribuer la priorité au groupe2 pour qu'il soit toujours inférieur au groupe1. Ensuite, lorsque vous ajoutez de nouveaux éléments au groupe1, il ne sera pas inséré sous le groupe2.
Voici un exemple:
<group Android:id="@+id/group1" />
<group
Android:id="@+id/group2"
Android:orderInCategory="999">
<item
Android:checked="false"
Android:id="@+id/item1"
Android:icon="@drawable/ic_inbox_black_24dp"
Android:title="Item1" />
<item
Android:checked="false"
Android:id="@+id/Item2"
Android:icon="@drawable/ic_inbox_black_24dp"
Android:title="Item2"
/>
</group>
Et lorsque vous ajoutez des éléments de menu à group1:
Menu menu = navigationView.getMenu();
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName);
Cela devrait fonctionner. Je l'ai testé sur Android 23.1.1.
<group Android:checkableBehavior="single">
<item
Android:id="@+id/send_notification"
Android:icon="@drawable/ic_menu_send"
Android:title="@string/send_notification"
Android:visible="false"/>
</group>
si vous souhaitez également ajouter un élément dynamiquement dans un tiroir de navigation, rendez-le invisible en xml et rendez-le visible par programmation comme suit.
NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu=navigationView.getMenu();
menu.findItem(R.id.send_notification).setVisible(true);
c'est ça.