FragmentActivity操作栏选项菜单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FragmentActivity操作栏选项菜单相关的知识,希望对你有一定的参考价值。

我正在尝试将ActionBar按钮添加到FragmentActivity中,我无法弄清楚我做错了什么。在运行应用程序时,我看到的是ActionBar上的默认菜单按钮而不是我的按钮。

FragmentActivity:

   @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>

答案

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)版本。

另一答案

让你的MainActivity扩展ActionBarActivity而不是FragmentActivity

ActionBarActivity本身延伸FragmentActivity所以你应该没事。

另一答案

来自Fragment Documents

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

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

或者为了向后兼容,最好在onCreate()结束时尽可能晚地调用此调用,或者甚至在onActivityCreated()中稍后调试。尝试在onCreate()onActivityCreated()中使用它。

希望这可以帮助。

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

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

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

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

如何在左侧的操作栏上充气菜单

JS对于导航栏下拉菜单以及选项卡的切换操作大图轮播(主要练习对于样式表的操作)

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