我创建了一个支持手机和平板电脑版本的应用,因此我使用了android-support-v4.jar库。
我的活动扩展了ListFragment,我试图覆盖onCreateOptionsMenu(菜单菜单,MenuInflater inflater),如下面的链接:http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.html
我以前称之为setHasOptionsMenu。
不幸的是,我似乎无法覆盖onCreateOptionsMenu()。
这是错误消息:
方法onCreateOptionsMenu(菜单菜单,MenuInflater inflater) 类型MyFragment必须覆盖或实现超类型方法。
我这样做了:
Public class MyFragment extends ListFragment
答案 0 :(得分:55)
确保导入来自兼容性库,而不是来自SDK本身。
答案 1 :(得分:47)
好的,我刚遇到同样的问题,虽然这里没有解决的问题。我正在使用ActionBarSherlock库,结果onCreateOptionsMenu
希望Menu
来自android.support.v4.view.Menu
而MenuInflater
来自android.view.MenuInflater
,而不是android.support.v4.view.MenuInflater
}}。不要问我为什么。我不知道这是否会解决所有问题,所以我将分享我是如何理解的:
右键单击您希望方法位于Elcipse的空白区域>来源>覆盖/实施方法......
然后从这里找到它,Eclipse会自动导入正确的东西。
答案 2 :(得分:26)
我在我的活动中使用SherlockActionBar有类似的问题。这是我的设置解决了问题:
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
public class LoginActivity extends SherlockActivity {
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.activity_login, menu);
return true;
}
...
}
答案 3 :(得分:16)
有同样的问题,但那是因为我在片段中使用了错误的onCreateOptionsMenu方法!
布尔onCreateOptionsMenu(Menu menu)仅适用于活动。
@Override //For Activities
public boolean onCreateOptionsMenu(Menu menu) {
...
必须将其移动到包含Fragment的活动类。
片段有自己的:void onCreateOptionsMenu (Menu menu, MenuInflater inflater)
@Override //For Fragments.
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater){
...
创建选项菜单:http://developer.android.com/guide/topics/ui/menus.html
答案 4 :(得分:7)
哎哟!!!那是一个很好的!
我在MyFragment中导入了android.view.Menu而不是android.support.v4.Menu!
我在这个上面丢了几个小时!希望这篇文章能够至少帮助别人。
答案 5 :(得分:2)
试试这个,实际上IDE已经混淆了bw原生菜单导入和Sherlock import..so如果我们清楚地指定它然后它将被解决..
@Override
public void onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu,
com.actionbarsherlock.view.MenuInflater inflater) {
}
@Override
public boolean onOptionsItemSelected(
com.actionbarsherlock.view.MenuItem item) {
// TODO Auto-generated method stub
}
答案 6 :(得分:1)
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
// TODO Auto-generated method stub
getSupportMenuInflater().inflate(R.menu.main, menu);
return true;
}
答案 7 :(得分:0)
在Xamarin的活动中遇到同样的问题。 它期待该方法将Xamarin.ActionbarSherlockBinding.Views.IMenu作为参数。
如何找出: -Comment OnCreateOptionsMenu方法您已开始实施。 - 在某些工作方法中,开始键入OnCreateOptionsMenu,就像你想要调用它一样。 - 从建议列表中选择它。 - 将光标放在OnCreateOptionsMenu调用上。 -press Command + d转到汇编浏览器。您将看到实现的界面。 - 然后通过在参数类型上按鼠标指针,您将进入此类型实现的接口。 - 你会看到它所在的命名空间。
答案 8 :(得分:0)
我有同样的问题,这就是我在Fragment的onCreateOptionsMenu上所做的。 重写Fragment的onCreate方法,并确保使用参数值为#34; true"的setHasOptionsMenu方法。让系统知道Fragment将使用OptionsMenu。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
然后覆盖onCreateOptionsMenu以膨胀您的菜单xml文件(在此示例中我膨胀了fragmentmenu.xml
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragmentmenu, menu);
}
答案 9 :(得分:-1)
我使用的是com.actionbarsherlock.view.Menu - 也许它已经改变了吗?