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

Posted

技术标签:

【中文标题】如何在片段中使用与活动中不同的菜单?【英文标题】:How to use different menu in fragment than in activity? 【发布时间】:2016-11-13 15:39:29 【问题描述】:

我想为我的主要活动创建一个菜单,并为包含在主要活动中的片段提供一个菜单。当片段可见时,应删除主活动菜单并膨胀片段菜单。我试图实现这一点,但结果如下:

主活动菜单 sn-p 本身:

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

尽管创建并扩充了片段菜单,但我显然没有替换主活动中的菜单。

这里是负责此操作的 Activity 中的代码:

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

如果您想保持这种结构,可以尝试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);

【讨论】:

以上是关于如何在片段中使用与活动中不同的菜单?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用菜单按钮将数据从活动传递到android中的片段?

如何在 Android 工作室中从现有活动创建片段

如何在片段中的 recyclerView 上打开不同的活动?

如何在多片段活动中处理 onContextItemSelected?

如何在单个活动中使用片段中的主要活动浮动操作按钮?

如何从片段返回主要活动