动态添加项目到Android中的NavigationView

时间:2015-07-30 11:28:42

标签: android navigation-drawer android-menu

我想构建NavigationDrawer,可以添加新项目(例如添加新城市的yahoo weather App)。我与NavigationDrawer一起工作NavigationView,在菜单中我有永久字段:

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

我尝试添加新的此方法:

 public boolean addNewItem(String itemName){
        Menu menu = navigationView.getMenu();
        menu.add(R.id.group,Menu.NONE,Menu.NONE,itemName);
        return true;
 }

我并不完全得到我想要的东西: Result

有谁知道如何解决这个问题?或者为什么会这样? 我不知道在哪里以及如何保存有关添加元素的信息。有任何想法吗?

3 个答案:

答案 0 :(得分:21)

要以编程方式添加项目,我们可以使用getMenu() NavigationView方法获取Menu对象,然后我们可以使用该Menu对象将项目添加到导航栏中。

final Menu menu = navigationView.getMenu();
for (int i = 1; i <= 3; i++) {
   menu.add("Runtime item "+ i);
}

使用SubMenu,我们可以在其中添加一个子项和项目。

// 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);
}

了解更多详情Check TechnoTalkative

编辑: 如果要与菜单进行交互,请使用
menu.add(0, itemId, 0, title);然后再

 public boolean onNavigationItemSelected(MenuItem item) {
        // Handle navigation view item clicks here.
        int id = item.getItemId();

id 会为您分配 itemId

答案 1 :(得分:12)

假设您有两个组,group1和group2。如果要将项目动态添加到group1,则可以为group2分配优先级,使其始终低于group1。然后,当您向group1添加新项目时,它不会插入group2下面。

以下是一个示例:

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

当您向group1添加菜单项时:

Menu menu = navigationView.getMenu();
menu.add(R.id.group1,Menu.NONE,Menu.NONE,itemName);

这应该有效。我在Android设计库23.1.1上进行了测试。

答案 2 :(得分: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>

如果您也想将项目动态添加到导航抽屉中,请使其在xml中不可见,并通过编程方式使其可见,如下所示。

NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu=navigationView.getMenu();
menu.findItem(R.id.send_notification).setVisible(true);

就这样。