使用setHasOptionMenu隐藏使用Fragment创建的OptionMenu(true)

时间:2016-07-29 11:23:11

标签: android android-fragments android-viewpager navigation-drawer optionmenu

我假设有三个片段,并希望为每个片段显示单独的选项菜单以及基本共性的常用菜单。我在片段中的onCreateView()中设置setHasOptionMenu(true)并覆盖onOptionItemCreated()。它成功显示菜单。现在我想隐藏/删除从片段添加的菜单作为片段一个菜单可见也是片段B并且它只添加新菜单购买没有删除片段破坏上的旧菜单。请帮忙!

3 个答案:

答案 0 :(得分:1)

在要隐藏某些项目的Fragment中,执行以下操作 -

@Override
public void onPrepareOptionsMenu(Menu menu) {
    MenuItem item=menu.findItem(R.id.action_search);
    item.setVisible(false);
    ...
}

答案 1 :(得分:0)

这种情况正在发生,因为onCreateView()没有被再次调用,我们也不能依赖onResume(),因为对于片段,它与活动生命周期紧密相关。针对这种情况的一个简单方法是使用replace代替add来使用片段事务。这将迫使片段娱乐,因此应该在这里工作。

<强> [编辑]

或者,您可以尝试将菜单代码放在onResume()的片段中,严格使用replace()代替add()进行片段交易。

答案 2 :(得分:0)

活动:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    menu.findItem(R.id.action_id_here).setVisible(false);

    return true;
}

For Fragment:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.findItem(R.id.action_id_here).setVisible(false);
}