Java 如何在片段中使用与在活动中不同的菜单?

Java 如何在片段中使用与在活动中不同的菜单?,java,android,xml,android-fragments,android-menu,Java,Android,Xml,Android Fragments,Android Menu,我想为我的主要活动和包含在主要活动中的片段创建一个菜单。当片段可见时,应移除主活动菜单,并使片段菜单膨胀。我曾试图实现这一目标,但结果是: 主活动菜单片段本身: 显示片段时的主活动菜单片段: 很明显,我没有替换主活动中的菜单,而是将其添加到主活动中,尽管已经创建并扩展了一个片段菜单 以下是活动中负责此操作的代码: @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this ad

我想为我的主要活动和包含在主要活动中的片段创建一个菜单。当片段可见时,应移除主活动菜单,并使片段菜单膨胀。我曾试图实现这一目标,但结果是:

主活动菜单片段本身:

显示片段时的主活动菜单片段:

很明显,我没有替换主活动中的菜单,而是将其添加到主活动中,尽管已经创建并扩展了一个片段菜单

以下是活动中负责此操作的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    // Depending on which fragment is used display different actions.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.friend_menu, menu);
}
以下是片段中负责此操作的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    // Depending on which fragment is used display different actions.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.friend_menu, menu);
}
以下是friend_menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
    android:icon="@drawable/ic_person_add_black_24dp"
    android:id="@+id/nav_person_add"
    android:title="Add people"
    app:showAsAction="ifRoom" />

</menu>


如何获得所需的菜单(无搜索操作和添加朋友操作)?我意识到,从活动中管理这一点可能会更简单,并且只有当片段显示时,才会显示特定的片段菜单,如活动中的注释所示:
//根据使用的片段显示不同的操作。
您可以尝试
清除()
如果您想保持这种结构,请打开菜单

在您的
片段中

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    menu.clear(); // Remove all existing items from the menu, leaving it empty as if it had just been created.
    inflater.inflate(R.menu.friend_menu, menu);
}