FragmentActivity操作栏选项菜单

时间:2014-09-06 19:25:31

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

我试图将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>

3 个答案:

答案 0 :(得分:13)

MainActivity展开ActionBarActivity而不是FragmentActivity

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

答案 1 :(得分: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)版本。

答案 2 :(得分:2)

来自Fragment Documents

  

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

因此,您应该在setHasOptionsMenu(true)中致电onCreate()

或者为了向后兼容,最好在onCreate()结束时尽可能晚地拨打此电话,或者在onActivityCreated()中更晚。请尝试在onCreate()或{{1}中使用此电话}}

希望这有帮助。