Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过两个菜单替换操作栏菜单_Android - Fatal编程技术网

Android 通过两个菜单替换操作栏菜单

Android 通过两个菜单替换操作栏菜单,android,Android,我想在更改操作栏时用另一个菜单替换操作栏的当前菜单 为了实现这一点,我写了: getMenuInflater().inflate(R.menu.menu2, menu_bar); 但它会在当前菜单的其余部分添加新菜单 我想要的是删除当前的并添加新的。 如何执行此操作?您可以调用InvalidateOptions功能表(),这将导致系统再次调用onPrepareOptions功能表(菜单菜单)。在这个方法中,在调用menu.clear()之后,只需检查两个菜单中的哪一个应该充气 请注意,

我想在更改操作栏时用另一个菜单替换操作栏的当前菜单

为了实现这一点,我写了:

getMenuInflater().inflate(R.menu.menu2, menu_bar);    
但它会在当前菜单的其余部分添加新菜单

我想要的是删除当前的并添加新的。
如何执行此操作?

您可以调用
InvalidateOptions功能表()
,这将导致系统再次调用
onPrepareOptions功能表(菜单菜单)
。在这个方法中,在调用
menu.clear()
之后,只需检查两个菜单中的哪一个应该充气


请注意,API 11(蜂巢)中引入了
invalidateOptions菜单()
。如果需要针对较低的API级别,可以将
onPrepareOptions功能表(菜单菜单菜单)
中的
菜单对象作为属性存储在
活动中,并直接在其上调用
clear()
,然后像已经做的那样膨胀所需菜单。

如果在更改片段时这样做:

(1)为片段创建菜单文件

(2)
onCreate()
片段集的方法
sethasOptions菜单(true)

(3)覆盖
onCreateOptions菜单
,在该菜单中,您将为片段菜单充气并将其附加到标准菜单

@Override 
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.menu2, menu);
}
(4)覆盖项目处理程序片段中选择的
onoptionInItems


查看下面的详细信息。

下面的答案是正确的,只是有一点需要说明

您可以调用InvalidateOptions菜单(),这将导致系统再次调用PrepareOptions菜单(菜单)。在这个方法中,在调用menu.clear()之后,只需检查两个菜单中的哪一个应该充气

请注意,API 11(蜂窝)中引入了InvalidateOptions菜单()。如果需要针对较低的API级别,可以将OnPrepareOptions菜单(菜单菜单菜单)中的菜单对象作为属性存储在“活动”中,并直接对其调用clear(),然后像已经做的那样对所需菜单进行充气

要点:在OnPrepareOptions菜单(菜单菜单)上,不应调用导致错误的旧菜单项 公共布尔值OnPrepareOptions菜单(菜单){


缩进代码,修正语法
// Error -> menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
menu.clear();
getMenuInflater().inflate(current_menu, menu);
return super.onPrepareOptionsMenu(menu);
}