【发布时间】:2018-04-05 03:35:25
【问题描述】:
我正在开发一个 Android 应用程序。首先,让我告诉你,我不专业。我现在正在做的是根据条件将子菜单添加到菜单中。但我需要在我的应用程序中经常这样做。但我的问题是我第一次在菜单中添加了一个子菜单。
但是当我第二次根据条件更新菜单时,现有的子菜单不会被删除,新的子菜单会附加到导航抽屉中。如何删除以编程方式添加到菜单的子菜单?为什么我的代码没有删除它?
这是我的代码
public void updateAuthUI()
{
isLoggedIn = tempStorage.getBoolean(getResources().getString(R.string.pref_is_logged_in),false);
Menu menu = leftDrawer.getMenu();
menu.removeItem(getResources().getInteger(R.integer.logout_item_id));
menu.removeItem(getResources().getInteger(R.integer.login_item_id));
menu.removeItem(getResources().getInteger(R.integer.register_item_id));
SubMenu authSubMenu = menu.addSubMenu("Auth");
if(isLoggedIn)
{
authSubMenu.add(1,getResources().getInteger(R.integer.logout_item_id),99,"Sign out");
}
else{
authSubMenu.add(1,getResources().getInteger(R.integer.register_item_id),97,"Register");
authSubMenu.add(1,getResources().getInteger(R.integer.login_item_id),98,"Sign in").setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
openLoginActivity();
item.setChecked(true);
return true;
}
});
}
}
这是我的问题的截图
如您所见,附加了 Auth 子菜单,但没有删除现有的子菜单。
【问题讨论】:
-
MenuItem item = navigationView.getMenu().getItem(3); item.setVisible(false);这个可以解决你在stackoverflow.com/questions/30695038/…的问题吗
-
仅仅设置可见性对性能没有好处。它会消耗如此多的内存。
-
navigationView.getMenu().clear(); //清除旧的膨胀项目。 navigationView.inflateMenu(R.menu.new_navigation_drawer_items);或者你可以清除它而不是重新创建
-
调用menu.removeItem(R.id.registerId)删除之前添加的SubMenu,然后添加新的SubMenu
标签: android navigation-drawer android-navigationview