我想在更改操作栏时将操作栏的当前菜单替换为另一个菜单。
为了达到这个目的,我写道:
getMenuInflater().inflate(R.menu.menu2, menu_bar);
但它在当前菜单的其余部分添加了新菜单。
我想要的是删除当前并添加新的。 我怎么能这样做?
答案 0 :(得分:0)
您可以拨打invalidateOptionsMenu()
,这会让系统再次拨打onPrepareOptionsMenu(Menu menu)
。在此方法中,只需在调用menu.clear()
后检查您应该膨胀的两个菜单中的哪一个。
请注意,API 11(Honeycomb)中引入了invalidateOptionsMenu()
。如果您需要定位较低的API级别,则可以将Menu
onPrepareOptionsMenu(Menu menu)
对象存储为Activity
中的属性,然后直接在其上调用clear()
,然后进行充气你正在做的所需菜单。
答案 1 :(得分:0)
如果你在改变片段时这样做,那么:
(1)为片段
创建菜单文件 (2) onCreate()
片段设置方法setHasOptionsMenu(true);
(3)覆盖onCreateOptionsMenu
,您可以在其中对片段的菜单进行充气并将其附加到标准菜单。
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu2, menu);
}
(4)覆盖项目处理程序片段中的onOptionItemSelected
。
查看下面的link了解详情..
答案 2 :(得分:0)
下面的答案是正确的只是有一个额外的点,将说
您可以调用invalidateOptionsMenu(),这将导致系统再次调用onPrepareOptionsMenu(菜单菜单)。在这个方法中,只需在调用menu.clear()后检查你应该膨胀的两个菜单中的哪一个。
请注意,API 11(Honeycomb)中引入了invalidateOptionsMenu()。如果您需要定位较低的API级别,可以将您的Menu对象从onPrepareOptionsMenu(菜单菜单)存储为Activity中的属性,并直接在其上调用clear(),然后按照您正在进行的操作来膨胀所需的菜单。 / p>
点:在onPrepareOptionsMenu(菜单菜单)不应调用导致错误的旧菜单项 public boolean onPrepareOptionsMenu(菜单菜单){
// Error -> menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
menu.clear();
getMenuInflater().inflate(current_menu, menu);
return super.onPrepareOptionsMenu(menu);
}