web-dev-qa-db-fra.com

ajout dynamique d'un élément à NavigationView dans Android

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: Result

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?

17
Skye

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, utilisez
menu.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

22
Pankaj Arora

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.

13
Hexise
<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.

0
Sanath L S