【问题标题】:FragmentActivity Action Bar Options MenuFragmentActivity 操作栏选项菜单
【发布时间】: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>

【问题讨论】:

标签: android android-fragments fragment android-fragmentactivity android-menu


【解决方案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?
    猜你喜欢
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多