更改片段中的操作栏菜单

时间:2014-11-04 12:12:57

标签: android android-fragments

我想在加载片段时加载另一个菜单xml。我在主要活动中使用此代码:

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

我在片段中使用此代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

当用户加载片段时,活动菜单应该删除然后片段菜单应加载到操作栏。 当用户从片段中单击后退按钮时,应删除片段菜单,然后主要活动菜单应加载到操作栏。

现在这段代码没有删除旧菜单,它将新菜单添加到旧菜单附近。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您可以使用 menu.clear(); 方法。

它从菜单中删除所有现有项目,将其留空,就像刚刚创建它一样。

试试这个..

@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    menu.clear(); // clears all menu items..
    getActivity().getMenuInflater().inflate(R.menu.fragment_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

答案 1 :(得分:1)

试试这个:

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

希望有所帮助

答案 2 :(得分:0)

您应该在setHasOptionsMenu(true);中调用 onCreateView 方法。

它告诉片段有菜单。

然后尝试以下代码...

@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        return inflater.inflate(R.layout.fragment_manage, container, false);
    }


@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater) {
    menu.clear(); // clears all menu items..
    inflater.inflate(R.menu.fragment_menu, menu);
    super.onCreateOptionsMenu(menu, inflater);
}