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

时间:2015-12-15 17:17:15

标签: android

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

为了达到这个目的,我写道:

getMenuInflater().inflate(R.menu.menu2, menu_bar);    

但它在当前菜单的其余部分添加了新菜单。

我想要的是删除当前并添加新的。 我怎么能这样做?

3 个答案:

答案 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);
}
相关问题