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方法无法显示菜单?