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

时间:2016-07-11 15:51:41

标签: java android xml android-fragments android-menu

我想要一个主要活动的菜单和一个包含在主要活动中的片段的菜单。应该删除主活动菜单,片段可见时片段菜单会膨胀。我试图实现这一点,但结果就是这样:

主要活动菜单摘录:

enter image description here

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

enter image description here

显然,尽管已经创建并夸大了片段菜单,但我还是添加了主要活动中的菜单。

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

@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>

如何获取所需的菜单(没有搜索操作和add_friend操作)?我意识到从活动中管理它可能更简单,只有在显示片段时才会夸大特定片段菜单,就像活动中的注释所示:// Depending on which fragment is used display different actions.

1 个答案:

答案 0 :(得分:1)

如果你想保持你的结构,你可以尝试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);
}