android - 在工具栏上为 Activity 和 fragment 显示不同的菜单选项

标签 android android-toolbar

Android Studio 1.4

我在 activity_main.xml 中有一个工具栏。 我有一个名为 main.xml 的菜单,它会被膨胀,上面只显示 1 个图标。

当用户点击打开 fragment 时。我有另一个菜单 friends.xml,它有 2 个图标。

当我在 fragment 中扩充好友菜单时,它仍然显示 main.xml 菜单中的图标。

我认为在工具栏上展开新菜单会删除现有菜单。

这是 main.xml 菜单的屏幕截图。显示查找图标 enter image description here

这是 fragment 的屏幕截图,您可以看到查找图标仍然存在。

enter image description here activity_main.xml 包含工具栏

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/tbMain"
            layout="@layout/app_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:clickable="true"/>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>

这是我在 MainActivity.java 中创建菜单的代码

    private void setupToolBar() {
        mToolbar = (Toolbar)findViewById(R.id.tbMain);
        setSupportActionBar(mToolbar);

        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return super.onOptionsItemSelected(item);
    }

在我的 fragment 中我有这个,你可以看到我正在膨胀 friends.xml 菜单。

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

非常感谢您的任何建议,

最佳答案

我不确定您是否可以使用 onCreateOptionsMenu() 执行此操作。我认为你最好的选择是 onPrepareOptionsMenu() .

您可以通过简单地写 getActivity().invalidateOptionsMenu() 强制 Android 刷新选项菜单在 Fragment 的 onResume() 中。

因此您的 onPrepareOptionsMenu() 将如下所示:

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    menu.clear();    //remove all items
    getActivity().getMenuInflater().inflate(R.menu.menu_fragment, menu);
}

关于android - 在工具栏上为 Activity 和 fragment 显示不同的菜单选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967874/

相关文章:

java - 在 X 秒内使用 onTouch 拍照

android - 添加两个具有不同主题的 AppCompat 工具栏

android - setLogo toolbar from url 图片

android - 在 Android 工具栏中创建一个按钮

android - 如果 min minSdkVersion 16,则使用 setActionBar() min appcompat

java - AutoCompleteTextview 不显示第一个字符条目的下拉建议

android - 如何添加系统SIP账号

android - 为什么 Android Studio 中不显示layout_gravity 属性?

android - 在第二个 Activity 中显示捕获的屏幕截图(在 ImageView 或图库中)

android - 使用 Floating Window Manager App 在连续点击时崩溃