FragmentActivity 操作栏选项菜单

Posted

技术标签:

【中文标题】FragmentActivity 操作栏选项菜单【英文标题】:FragmentActivity Action Bar Options Menu 【发布时间】:2014-10-31 11:21:47 【问题描述】:

我正在尝试将 ActionBar 按钮添加到 FragmentActivity,但我不知道我做错了什么。 运行应用程序时,我看到的只是 ActionBar 上的默认菜单按钮,而不是我的按钮..

片段活动:

   @Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.animalsmenu,menu);
    return true;

xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/dogs"
    android:title="Dogs"
    android:orderInCategory="1"
    app:showAsAction="always">
</item>

【问题讨论】:

在这里看看我的回答:***.com/questions/25700575/… @XDnl :问题(根据 OP)显示来自 FragmentActivity 的代码,而不是 Fragment 【参考方案1】:

让您的 MainActivity 扩展 ActionBarActivity 而不是 FragmentActivity

ActionBarActivity 本身扩展了FragmentActivity,所以你应该没问题。

【讨论】:

【参考方案2】:

FragmentActivity 类扩展(派生自)Activity 类。 Activity onCreateOptionsMenu(Menu menu) 方法的文档说明如下...

默认实现使用标准系统菜单项填充菜单。这些被放置在 CATEGORY_SYSTEM 组中,以便它们将使用应用程序定义的菜单项正确排序。 派生类应始终调用基础实现。

换句话说,将您的代码更改为...

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.animalsmenu, menu);
    super.onCreateOptionsMenu(menu);
    return true;

这会将您的菜单项膨胀到传递给重写方法的Menu,然后将其传递给该方法的父 (super) 版本。

【讨论】:

@james : 你是直接扩展FragmentActivity 还是你有自己的基类扩展FragmentActivity 然后你扩展它? 我直接扩展 FragmentActivity @james :您是使用“本机”库还是支持库(例如 android.support.v4.app.FragmentActivity)进行构建? 这个类正在使用 android.support.v4.app.FragmentActivity ,抱歉我忘了提。 @james :好的,那么您的 AndroidManifest 中的 minSdkVersion 是什么?如果您使用支持库,则可能存在类不匹配。【参考方案3】:

来自Fragment Documents

public void setHasOptionsMenu (boolean hasMenu) 报告此片段希望通过接收对 onCreateOptionsMenu(Menu, MenuInflater) 和相关方法的调用来参与填充选项菜单。

因此,您应该在您的onCreate() 中调用setHasOptionsMenu(true)

或者为了向后兼容,最好将此调用尽可能晚地放在onCreate() 的末尾,甚至更晚的onActivityCreated()。尝试在onCreate()onActivityCreated() 中使用它。

希望这会有所帮助。

【讨论】:

我不能在我的 onCreate() 中使用 setHasOptionsMenu(true) 任何想法为什么?可能是因为它是 FragmentActivity 而不是普通的 Fragment?

以上是关于FragmentActivity 操作栏选项菜单的主要内容,如果未能解决你的问题,请参考以下文章

各位好友,请问在Android开发中,FragmentActivity子类里覆的onCreateOptionsMenu方法无法显示菜单?

如何更改操作栏中的选项菜单图标?

隐藏/显示不同片段的操作栏选项菜单项

如何通过单击选项卡来更改操作栏菜单按钮

操作栏选项菜单的宽度

如何在 Android 4.2 中更改操作栏选项菜单的背景颜色?