如何以编程方式从Android的导航抽屉中删除子菜单?
我正在开发一个Android应用程序.首先,让我告诉你我不是专业人士.我现在要做的是根据情况在菜单中添加子菜单.但是我需要经常在我的应用中执行此操作.但是我的问题是我第一次在菜单中添加了子菜单.
I am developing an Android app. Firstly, let me tell you that I am not professional. What I am doing now is I am adding submenu to menu depending on a condition. But I need to do it very often in my app. But my problem is I added a submenu to the menu as first time.
但是第二次当我根据条件更新菜单时,现有子菜单不会被删除,新的子菜单会附加到导航抽屉中.如何删除以编程方式添加到菜单的子菜单?为什么我的代码没有删除它?
But second time when I update menu depending on condition, existing submenu is not removed and new submenu is appended to navigation drawer. How can I remove submenu that is programmatically added to menu? Why my code is not removing it?
这是我的代码
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;
}
});
}
}
这是我的问题的屏幕截图
Here is the screenshot of my problem
如您所见,身份验证"子菜单已添加,但未删除现有子菜单.
As you can see Auth submenu is appended without removing existing one.
尝试
authSubMenu.clear();
在您的第一个
authSubMenu.add();
我刚刚在使用第三方库的Android应用中使用了SubMenu.clear()
,并且需要从操作栏中清除不需要的子菜单. (我实际上是想完全删除该子菜单,这是我可以找到的唯一方法.它似乎起作用.)
I just used SubMenu.clear()
in an Android app where I was using a third-party library, and I needed to clear out an unwanted submenu from the action bar. (I actually wanted to remove the submenu completely, and this was the only way I could find to do it. It seemed to work.)
与您的情况不同,在这里,authSubMenu
是您刚刚通过menu.addSubMenu("Auth")
添加的菜单,因此您希望它为空.但是,正如您所看到的,它显然不是空的:而是 返回该标题的现有子菜单. (我找不到达到这种效果的文档;我只是按照您报告的结果进行操作.)
That's different from your situation, where authSubMenu
is a menu you just added via menu.addSubMenu("Auth")
, so you would expect it to be empty. But, as you've seen, it apparently isn't empty: rather, addSubMenu("Auth")
returns the existing submenu of that title. (I can't find documentation to that effect; I'm just going by the results you've reported.)
如果确实如此,那么authSubMenu.clear()
将从子菜单中删除所有现有项目.
If that really is the case, as it appears to be, then authSubMenu.clear()
will remove all existing items from the submenu.