当前位置: 首页 > 知识库问答 >
问题:

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

颛孙轩昂
2023-03-14
Android Studio 1.4

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

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

当我在片段中膨胀friends菜单时,它仍然显示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>
    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);
    }
  @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.friends, menu);
    }

非常感谢您的任何建议,

共有1个答案

田博远
2023-03-14

我不确定是否可以使用oncreateOptionsMenu()来实现这一点。我认为您最好选择onprepareOptionsMenu()

您可以通过在fragment的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);
}
 类似资料:
  • 我有一个工具栏和一个导航抽屉。当我启动应用程序时,会创建工具栏和导航抽屉。当我单击导航抽屉中的项目时,它会启动新的片段并保留相同的工具栏。当我启动特定片段时,我基本上如何向工具栏添加菜单项,例如搜索、添加、编辑?我不希望在程序开始时使用它们,而是动态创建的。还有,我怎样才能点击这些按钮,让它们启动其他片段呢。我希望在一个片段中,与另一个片段中的编辑按钮相比,工具栏中的编辑按钮可以做特定的事情。谢谢

  • 在我的应用程序中,我有一个活动,其中包含一个FrameLayout。在这个FrameLayout中,有一个片段,包含一个ToolBar和一个RecyclView。 在这个工具栏中,我有一个搜索按钮,它应该在项目单击时启动活动。但是,当我尝试使用onOptionsItemSelected时,应用程序会成功构建和安装,但当我尝试点击该按钮时,什么也没发生。Logcat也没有说什么。 能告诉我我做错了什

  • 我有一个使用本教程创建的抽屉和滑动选项卡的项目。我正在使用支持库使材料设计可用于较老的android版本。我还使用了而不是。我有一个连接到工具栏菜单: 我已经找了好几个星期了,为了有效果。我做错什么了吗? 我如何才能有每个片段的特定菜单?我认为隐藏菜单项可能是更容易实现的选择,但如果你们有任何其他方法来实现,我将不胜感激。

  • 这个章节,我们会创建状态栏、菜单和工具栏。菜单是一组位于菜单栏的命令。工具栏是应用的一些常用工具按钮。状态栏显示一些状态信息,通常在应用的底部。 主窗口 QMainWindow提供了主窗口的功能,使用它能创建一些简单的状态栏、工具栏和菜单栏。 主窗口是下面这些窗口的合称,所以教程在最下方。 状态栏 状态栏是用来显示应用的状态信息的组件。 #!/usr/bin/python3 # -*- codin

  • 这个章节,我们会创建状态栏、菜单和工具栏。菜单是一组位于菜单栏的命令。工具栏是应用的一些常用工具按钮。状态栏显示一些状态信息,通常在应用的底部。 主窗口 QMainWindow 提供了主窗口的功能,使用它能创建一些简单的状态栏、工具栏和菜单栏。 主窗口是下面这些窗口的合称,所以教程在最下方。 状态栏 状态栏是用来显示应用的状态信息的组件。 #!/usr/bin/python3 # -*- codi

  • 我的应用程序里有标签。每个标签是不同的片段和不同的菜单。下面是我正在使用的布局 现在,对于中的每个片段,我都进一步提到了。我已经覆盖了每个片断中的函数,它首先有,然后调用它的超级构造函数,然后膨胀片断自己的菜单XML。但我得到的结果是这样的- 假设有5个选项卡。第2和第3个选项卡中的viewpager由中的两个片段组成 第一个选项卡没有菜单 第二个选项卡有menu_2(仅用于第二个子片段) 第三个