在工具栏上显示活动和片段的不同菜单选项

ant*_*009 8 android android-toolbar

Android Studio 1.4
Run Code Online (Sandbox Code Playgroud)

我有一个工具栏,我在我的膨胀activity_main.xml.我有一个叫做main.xml膨胀的菜单,只有1个图标可以显示在上面.

当用户单击以打开片段时.我有另一个菜单friends.xml,有2个图标.

当我在片段中为朋友菜单充气时,它仍会显示菜单中的图标main.xml.

我认为在工具栏上膨胀新菜单会删除现有菜单.

这是main.xml菜单的屏幕截图.将显示查找图标 在此输入图像描述

这是片段的屏幕截图,因为您可以看到查找图标仍然存在.

在此输入图像描述 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>
Run Code Online (Sandbox Code Playgroud)

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

在我的片段中,我有这个,因为你可以看到我正在膨胀friends.xml菜单.

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

非常感谢任何建议,

Suf*_*ian 14

我不确定你是否可以这样做onCreateOptionsMenu().我认为你最好的选择是onPrepareOptionsMenu().

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

所以你的onPrepareOptionsMenu()看起来像:

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