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);
}