android - 如何以编程方式将组添加到抽屉导航

标签 android navigation-drawer

我的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");


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

问候,
海梅

最佳答案

如果您想坚持使用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都不同,类别中的顺序就是动态项目整个菜单中的实际顺序。

关于android - 如何以编程方式将组添加到抽屉导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59546177/

相关文章:

android - 如何正确使用 AsyncTask

android - 在单个 fragment 中处理后退按钮

Android 导航 View : How do I handle/disable selection of the header layout?

java - 带选项卡的抽屉式导航

android - GroundOverlay 图像未旋转

android - 谷歌地图需要很长时间才能加载

android - 抽屉导航 - 禁用点击抽屉后面的项目

android - 在 Android 中禁用抽屉导航

android - Fragment 中的 ScrollView 保留位置

java - logback 找不到 LoginAuthenticator