更改片段中的工具栏菜单

时间:2015-08-05 08:37:49

标签: android menu toolbar

我有MainActivity并且它有片段。我在MainActivity;

添加了工具栏

MainActivity

private Toolbar mToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mToolbar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

当我打开MainActivity中的任何片段时,该片段使用自己的菜单文件

片段

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.custom_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

正如您在上面所看到的,我在onCreateOptionsMenu中夸大了自定义菜单。但它不起作用。

2 个答案:

答案 0 :(得分:3)

之后

toolbar.getMenu().clear();

添加toolbar.inflateMenu(R.menu.menu_blank); 并且我没有将工具栏设置为acionbar,也许你应该使用getActionbar来做某事。

答案 1 :(得分:1)

我不完全确定这是你问的问题,但我想你希望能够动态地更改菜单中的选项。您可以执行以下操作

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    if (mHideSomething) {
        MenuItem myItem = menu.findItem(R.id.action_something);
        myItem.setVisible(false);
    } //otherwise it will show as usual
    return true;
}

然后当你想改变菜单中的某些内容时......

mHideSomething = true;
supportInvalidateOptionsMenu();

修改
现在我明白你只是在覆盖时加入奇怪的行为。您仍然可以执行以下操作(尽管看起来这些项目不应该是主菜单的一部分,如果它们总是不相关的话)

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.custom_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
    MenuItem mainMenuItemToRemove = menu.findItem(R.id.action_something);
    mainMenuItemToRemove .setVisible(false);
}

上面唯一的问题是它假设主菜单中有什么可用,即使片段应该是可重用的。更好的解决方案是将接口传递给片段以回调活动并让活动具有控制权。更好的是,更新活动逻辑,如果不需要,永远不要给主菜单充气。