我有一个导航菜单,看起来像这样 -
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_home"
android:title="Home" />
<item
android:id="@+id/nav_logout"
android:icon="@drawable/ic_logout"
android:title="Logout" />
<item
android:id="@+id/choose_bus"
android:title="Choose a bus">
<menu>
<group
android:id="@+id/group_select_bus"
android:checkableBehavior="single">
<!--<item-->
<!--android:id="@+id/menu_option1"-->
<!--android:title="Bus 1" />-->
<!--<item-->
<!--android:id="@+id/menu_option2"-->
<!--android:title="Bus 2" />-->
</group>
</menu>
</item>
我想从活动中动态添加 menu_option1 和 menu_option2 。我试过这个,但没有添加 -
@Override
public boolean onNavigationItemSelected(MenuItem item) {
NavigationView navView = (NavigationView) findViewById(R.id.nav_view);
Menu menu = navView.getMenu();
MenuItem item1 = menu.getItem(2);
SubMenu subMenu = item1.getSubMenu();
subMenu.add("Bus 1");
subMenu.add("Bus 2");
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
答案 0 :(得分:1)
尝试这样的事情
Menu menu = navView.getMenu();
menu.add(R.id.group_select_bus,Menu.NONE,Menu.NONE,Youritem);
答案 1 :(得分:0)
另一种方法是在导航菜单中添加所有项目,然后更改其对特定活动或片段的可见性,例如
MenuItem item = mNavigationView.getMenu().getItem(5);
item.setVisible(false);
答案 2 :(得分:0)
尝试一下:
MenuItem item = mNavigationView.getMenu().getItem(2);
item.getSubMenu().add(R.id.group_select_bus, id, Menu.NONE, "Youritem");
答案 3 :(得分:0)
似乎迟到了。有解决方法/黑客。无需添加列表。只需在代码上方添加这一行。当然可以。
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.candidates -> {
binding.navSideView.post {
navSideView.menu.findItem(R.id.candidateManagement).isVisible = !navSideView.menu.findItem(R.id.candidateManagement).isVisible
}
}
}
return true
}
您需要在更改可见性之前添加navigationview.post Runnable。它将更新菜单。它也适用于组。 :)