我试图将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>
答案 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)
public void setHasOptionsMenu(boolean hasMenu)通过接收对onCreateOptionsMenu(Menu,MenuInflater)和相关方法的调用,报告此片段希望参与填充选项菜单。
因此,您应该在setHasOptionsMenu(true)
中致电onCreate()
。
或者为了向后兼容,最好在onCreate()
结束时尽可能晚地拨打此电话,或者在onActivityCreated()
中更晚。请尝试在onCreate()
或{{1}中使用此电话}}
希望这有帮助。