How to add a group to navigation drawer programmatically

点点圈 提交于 2020-06-27 08:15:20

问题


I have a navigation drawer in my android app. I can add groups and items to it by mean of XML, however, I need to add new groups to it programmatically.

For example, I have this 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>

How can I do it if that group has no items and I need to add them by code?

If I use:

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

The item is added as a menu below all options, not as a group.

Regards, Jaime


回答1:


My best suggestion if you want to stick to NavigationView is to do the following:

Set up your XML to contain any groups you think you need to add dynamically and set them to invisible:

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

Then when you need to show them or add dynamic options for these groups:

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

Just make sure when you add your items, the item Id's are different and the order in category are the actual order in the whole menu of dynamic items.



来源:https://stackoverflow.com/questions/33129695/how-to-add-a-group-to-navigation-drawer-programmatically

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!