我想在导航抽屉中的菜单中隐藏菜单项。 我尝试使用setHasOptionsMenu(true)然后添加方法
public boolean onPrepareOptionsMenu(Menu menu){
//this is where i tried to hide the item
menu.findItem(R.id.item).setVisible(false);
}
但它说这是空的。
有什么建议吗?
答案 0 :(得分:3)
您应该在片段的onCreate()方法中调用setHasOptionsMenu(true),以允许您的片段处理菜单项。所以你可以在你的片段中做这样的事情:
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
然后,您可以覆盖片段中的onPrepareOptionsMenu方法:
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
// You can hide the state of the menu item here if you call getActivity().supportInvalidateOptionsMenu(); somewhere in your code
MenuItem menuItem = menu.findItem(R.id.item);
menuItem.setVisible(false);
}
答案 1 :(得分:2)
我也遇到了同样的问题,如果您使用导航抽屉并想要使用菜单,那么您必须检查片段可见性: 请按照片段中的步骤操作,它对我有用:
1)检查片段可见性
boolean isMenuVisible = false;
@Override
public void setMenuVisibility(boolean menuVisible) {
try {
super.setMenuVisibility(menuVisible);
if (menuVisible && searchView != null) {
isMenuVisible = menuVisible;
}
} catch (Exception e) {
CommonUtils.firebaseCrashReport(e);
}
}
2)把这段代码
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
2然后只检查isMenuVisible的真值并使用菜单
@Override public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
if(isMenuVisible){
MenuItem menuItem = menu.findItem(R.id.item);
menuItem.setVisible(false);
}
}
答案 2 :(得分:1)
getActivity()invalidateOptionsMenu();将调用onPrepareOptionsMenu并更新您的菜单。
答案 3 :(得分:1)
这可以通过隐藏菜单项
来完成 在活动中:
navigationView = (NavigationView) findViewById(R.id.nav_view);`
片段:
Menu nav_Menu = context.navigationView.getMenu();<br/>
nav_Menu.findItem(R.id.item_id).setVisible(false);<br>
您可以将活动上下文传递给片段
答案 4 :(得分:0)
当您使用导航抽屉时,您必须从中获取MenuItem
。
将NavigationView
引用存储在onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutId);
...
nvDrawer = (NavigationView) findViewById(R.id.nvView);
}
隐藏onPrepareOptionsMenu
中的MenuItem:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean ret = super.onPrepareOptionsMenu(menu);
MenuItem stateBtn = nvDrawer.getMenu().findItem(R.id.item);
stateBtn.setVisible(true);
return ret;
}
答案 5 :(得分:0)
在onCreate()调用中
setHasOptionMenu(true)
像这样检查onPrepareOptionsMenu()中的空项目。
@Override
public void onPrepareOptionsMenu(Menu menu) {
MenuItem item=menu.findItem(R.id.menu_id);
if(item!=null)
item.setVisible(false);
}