【问题标题】:How to add a group to navigation drawer programmatically如何以编程方式将组添加到导航抽屉
【发布时间】:2015-10-15 04:58:31
【问题描述】:

我的 android 应用中有一个导航抽屉。我可以通过 XML 向其中添加组和项目,但是,我需要以编程方式向其中添加新组。

例如,我有这个 XML:

<group android:checkableBehavior="single">
    <item android:id="@+id/nav_camara" android:icon="@android:drawable/ic_menu_camera"
        android:title="Import" />
    <item android:id="@+id/nav_gallery" android:icon="@android:drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item android:id="@+id/nav_slideshow" android:icon="@android:drawable/ic_menu_slideshow"
        android:title="Slideshow" />
    <item android:id="@+id/nav_manage" android:icon="@android:drawable/ic_menu_manage"
        android:title="Tools" />
</group>

如果该组没有项目,我需要通过代码添加它们,我该怎么做?

如果我使用:

Menu sistemas = navigationView.getMenu();
sistemas.add(Menu.FIRST, 1, 0, "Prueba");

该项目作为菜单添加到所有选项下方,而不是作为一个组。

问候, 詹姆

【问题讨论】:

  • 我建议您以编程方式所有项目,如 this tutorial 中所建议的那样。
  • sistemas.addSubMenu ?是你想做的吗?
  • 我猜你正在使用NavigationView。我查看了NavigationView 的代码,它不是动态的。它使用菜单资源在初始化时创建视图,然后基本上忽略它。如果您想做任何动态的事情,您需要寻找NavigationView 之外的其他解决方案。幸运的是,GitHub 上有很多导航抽屉。我使用android.support.design.internal.ScrimInsetsFrameLayout 推出了自己的产品。

标签: android navigation-drawer


【解决方案1】:

如果您想坚持使用 NavigationView,我最好的建议是执行以下操作:

设置您的 XML 以包含您认为需要动态添加的任何组并将它们设置为不可见:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
    <group android:id="@+id/main_group">
         <item android:id="@+id/nav_camara"
             android:icon="@android:drawable/ic_menu_camera"
             android:title="Import" />
         <item android:id="@+id/nav_gallery" 
             android:icon="@android:drawable/ic_menu_gallery"
             android:title="Gallery" />
         <item android:id="@+id/nav_slideshow" 
             android:icon="@android:drawable/ic_menu_slideshow"
             android:title="Slideshow" />
         <item android:id="@+id/nav_manage" 
             android:icon="@android:drawable/ic_menu_manage"
             android:title="Tools" />
    </group>
    <group android:visible="false" android:id="@+id/second_group">

    </group>
    <group android:visible="false" android:id="@+id/third_group">

    </group>
</menu>

然后当您需要显示它们或为这些组添加动态选项时:

      Menu menu = mNavView.getMenu();

      // Add items to the second group, and set to visible
      menu.add(R.id.second_group, 1, 100, "Item 1");
      menu.add(R.id.second_group, 2, 200, "Item 2");
      menu.add(R.id.second_group, 3, 300, "Item 3");
      menu.setGroupCheckable(R.id.second_group, true, true);
      menu.setGroupVisible(R.id.second_group, true);

      // Add items to the third group, and set to visible
      menu.add(R.id.third_group, 4, 400, "Item 1");
      menu.add(R.id.third_group, 5, 500, "Item 2");
      menu.add(R.id.third_group, 6, 600, "Item 3");
      menu.setGroupCheckable(R.id.third_group, true, true);
      menu.setGroupVisible(R.id.third_group, true);

只需确保在添加商品时,商品 ID 不同,并且类别中的顺序是动态商品整个菜单中的实际顺序。

【讨论】:

  • 我已经完成并添加了该选项,但是,当我单击它时,背景不会变为灰色,反映它已被选中,因为其他组项的行为。我需要做其他事情吗?例如,分配一个点击处理程序或其他什么。
  • @jstuardo 如果每个组都需要检查,只需将android:checkableBehavior="single" 添加到菜单的 xml 定义中需要它的组中
  • 不走运。我已将该属性设置为组标记,甚至调用了 onNavigationItemSelected,但是,该项目未显示任何选择。当我单击预定义的组时,也会调用 onNavigationItemSelected 并且该项目以灰色背景正确显示。
  • @jstuardo 很抱歉误导了你,请查看上面的更新,你应该在你的代码中这样做
  • 尝试这样做,但它不断将 MenuItem 添加到 NavDraw 的末尾,而不是添加到 Drawer 中间的 Hidden 组 =/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
相关资源
最近更新 更多