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

Tom*_*net 4 java xml android android-menu android-fragments

我想要一个用于我的主要活动的菜单和一个用于主要活动中包含的片段的菜单。当片段可见时,应删除主活动菜单并放大片段菜单。我试图实现这一目标,但结果是这样的:

主要活动菜单片段本身:

在此输入图像描述

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

在此输入图像描述

显然,尽管已经创建并扩充了片段菜单,但我并没有替换主要活动中的菜单,而是添加了菜单。

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

@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;
}
Run Code Online (Sandbox Code Playgroud)

以下是片段中负责此操作的代码:

@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);
}
Run Code Online (Sandbox Code Playgroud)

这是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>
Run Code Online (Sandbox Code Playgroud)

如何获得我想要的菜单(不使用搜索操作而使用 add_friend 操作)?我意识到从活动中管理它可能更简单,并且仅在显示片段时才膨胀特定的片段菜单,如活动中的注释所示:// Depending on which fragment is used display different actions.

Mur*_*göz 5

如果您想保持这种结构,您可以尝试使用clear()菜单。

在你的Fragment

@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);
}
Run Code Online (Sandbox Code Playgroud)