3

我想添加ActionBar按钮到FragmentActivity,我无法弄清楚我做错了什么。 当运行应用程序的所有我看到的是在动作条,而不是我的按钮的默认菜单按钮..FragmentActivity Action Bar选项菜单

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

+0

看看我的答案在这里:http://stackoverflow.com/questions/25700575/acessing-the-options-menu-from-a-fragment-android/25700901#25700901 – XDnl 2014-09-06 20:20:56

+0

@XDnl:这个问题(根据到OP)显示来自'FragmentActivity',而不是'Fragment'的代码。 – Squonk 2014-09-06 20:26:51

回答

5

FragmentActivity类扩展(派生自)Activity类。 ActivityonCreateOptionsMenu(Menu menu)方法的文档声明如下...

缺省实现使用标准系统菜单项填充菜单。它们被放置在CATEGORY_SYSTEM组中,这样它们将被正确地按照应用程序定义的菜单项排序。 派生类应始终调用基本实现。

换句话说,改变你的代码...

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.animalsmenu, menu); 
    super.onCreateOptionsMenu(menu); 
    return true; 
} 

这会夸大你的菜单项为Menu传递给您的重写的方法,然后将它传递给父(super )版本的方法。

+0

谢谢你的回答,但它仍然不能正常工作。 – james 2014-09-06 20:24:36

+0

@james:你是直接扩展'FragmentActivity'还是你有一个你自己的扩展'FragmentActivity'的基类,然后你扩展它呢? – Squonk 2014-09-06 20:42:41

+0

我直接扩展FragmentActivity – james 2014-09-06 20:45:30

2

来自Fragment Documents

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

因此,您应该在您的onCreate()中拨打setHasOptionsMenu(true)

或者向后兼容性最好是在onCreate()甚至在任何onCreate()onActivityCreated()使用此以后onActivityCreated()。尝试结束尽可能晚地拨打这通电话。

希望这会有所帮助。

+3

我不能在我的onCreate()里面使用setHasOptionsMenu(true)为什么?也许是因为它是一个FragmentActivity而不是一个正常的片段? – james 2014-09-06 20:26:02

13

使您的MainActivity扩展为ActionBarActivity而不是FragmentActivity

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