如何以编程方式将组添加到导航抽屉
How to add a group to navigation drawer programmatically
我的 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 应用程序中有一个导航抽屉。我可以通过 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 不同,类别中的顺序是整个动态项目菜单中的实际顺序。