FragmentActivity操作栏选项菜单

问题描述 投票:3回答:3

我正在尝试将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>

android android-fragments fragment android-fragmentactivity android-menu
3个回答
5
投票

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


13
投票

让你的MainActivity扩展ActionBarActivity而不是FragmentActivity

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


2
投票

来自Fragment Documents

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

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

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

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.