我试图隐藏MenuItem
我的菜单,但没有成功。
这是我现在的代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu){
MenuItem item = menu.findItem(R.id.lastOption);
item.setVisible(false);
invalidateOptionsMenu();
return true;
}
但是当我运行应用程序时它仍会显示该选项。
试图找出这种行为发生的原因,我试图为我的代码设置一些断点,发现menu
变量有一个名为mVisibleItems
的变量。在那个变量中,我可以看到我试图隐藏的项目没有出现。但它出现在应用程序中。
所以,我无法理解为什么如果菜单上没有显示可见变量,它仍会显示在应用程序上。
我错过了什么吗?
提前致谢!
答案 0 :(得分:0)
invalidateOptionsMenu();
,再次致电onCreateOptionsMenu
。从文档
声明选项菜单已更改,因此应重新创建。该 onCreateOptionsMenu(Menu)方法将在下次需要时调用 待显示。
因此,在将项目设置为false后,您再次夸大菜单布局
答案 1 :(得分:0)
我认为这不是更好的方法,但我不能使用onPrepareOptionsMenu
。
由于我需要两种类型的菜单,具体取决于已登录的用户(管理员或用户),我最终会为我的应用程序创建两种类型的菜单。一个有一些选项,一个没有普通用户不需要的选项。然后,在onCreateOptionsMenu
上,我根据已登录的用户对我需要的菜单进行了充气。
这是代码:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
if("admin".equals(typeUser)){
getMenuInflater().inflate(R.menu.activity_main_admin, menu);
}else{
getMenuInflater().inflate(R.menu.activity_main_user, menu);
}
return true;
}
其中typeUser
是String
我从Login Activity
发送的,我在其中根据已登录的用户设置了一个包。
我还创建了两个activity_main
布局,更改了XML上NavigationView
的菜单选项:
app:menu="@menu/activity_main_admin"
或app:menu="@menu/activity_main_user"
,具体取决于布局。
最后,我还创建了一个条件,根据已登录的用户在onCreate
MainActivity
方法上设置布局。这是执行此操作的代码:
if("admin".equals(typeUser)){
setContentView(R.layout.admin);
}else{
setContentView(R.layout.user);
}