我已经在这个问题上停留了很长一段时间了。在我的代码中,我有一个片段,我不想在其中显示搜索菜单项。为了达到这个目的,我在片段
中做了这个内部onCreate
setHasOptionsMenu(true);
然后
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
this.menu = menu;
MenuItem search = menu.findItem(R.id.action_search);
search.setVisible(false);
}
这与预期完全一样,并隐藏了该项目。现在,当我回来按下主要活动的o nBackPressed()
时,我会这样做
@Override
public void onBackPressed() {
// code skipped
invalidateOptionsMenu();
}
这会调用主要活动中的onCreateOptionsMenu
,如下所示
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
item = menu.findItem(R.id.action_search);
item.setVisible(true);
//code skipped
}
onCreateOptionsMenu
函数被调用,但不幸的是menuItem
仍然隐藏,我无法看到搜索菜单。
有人可以帮忙,可能是什么问题?在此先感谢!!
答案 0 :(得分:1)
方法onCreateOptionsMenu
仅在创建活动(或片段)时调用。使用onPrepareOptionsMenu
设置菜单项的可见性。 invalidateOptionsMenu
来电onPrepareOptionsMenu
,而非onCreateOptionsMenu
。