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

时间:2015-10-06 10:39:17

标签: android android-toolbar

Android Studio 1.4

我有一个工具栏,我在activity_main.xml中充气。 我有一个名为main.xml的菜单,它会被充气,只有一个图标可以显示在其上。

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

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

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

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

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

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);
    }

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

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

非常感谢任何建议,

2 个答案:

答案 0 :(得分:13)

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

您只需在片段onResume()中写getActivity().invalidateOptionsMenu()即可强制Android刷新选项菜单。

所以你的onPrepareOptionsMenu()会是这样的:

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

答案 1 :(得分:3)

menu引用存储在变量中。

 private Menu menu;

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

当替换为提到的片段时,请执行以下操作。

private void hideOption(int id) {
        menu.findItem(id).setVisible(false);
    }

使用菜单ID调用hideOption()。对于前,

hideOption(R.id.action_search);

反过来显示。或遵循#Droidwala的建议