无法覆盖 ListFragment 中的 onCreateOptionsMenu

Posted

技术标签:

【中文标题】无法覆盖 ListFragment 中的 onCreateOptionsMenu【英文标题】:Unable to override onCreateOptionsMenu in ListFragment 【发布时间】:2011-12-12 10:47:42 【问题描述】:

我创建了一个同时支持手机和平板电脑版本的应用,所以我使用了 android-support-v4.jar 库。

我的活动扩展了 ListFragment,我尝试覆盖 onCreateOptionsMenu(Menu menu, MenuInflater inflater),如下链接所示:http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentMenuSupport.html

我之前调用过 setHasOptionsMenu。

不幸的是,我似乎无法覆盖 onCreateOptionsMenu()。

这是错误信息:

方法onCreateOptionsMenu(Menu menu, MenuInflater inflater) MyFragment 类型必须覆盖或实现超类型方法。

我做到了:

Public class MyFragment extends ListFragment

【问题讨论】:

【参考方案1】:

确保导入来自兼容性库,而不是来自 SDK 本身。

【讨论】:

当您回复时,我正在编写我的解决方案;-) 您是对的,这就是问题所在。谢谢。 如果您通过谷歌搜索 ActionBarSherlock 的相同错误来解决此问题,则适用相同的解决方案。删除菜单导入语句并从 ABS 重新导入菜单。将 getMenuInflater 替换为 getSupportMenuInflater。 更清楚一点:您需要重写使用sherlock Menu 类的方法,而不是sdk 类。还可以使用 getSupportMenuInflater() 为 lib 菜单充气。【参考方案2】:

好的,我也遇到了同样的问题,虽然这里的内容并没有解决这个问题。我正在使用 ActionBarSherlock 库,结果发现 onCreateOptionsMenu 希望 Menu 来自 android.support.v4.view.MenuMenuInflater 来自 android.view.MenuInflater,而不是 android.support.v4.view.MenuInflater。不要问我为什么。我不知道这是否会解决每个人,所以我将分享我是如何解决的:

在 Elcipse 中您希望方法所在的空白处右键单击 > Source > Overide/Implement methods...

然后从这里找到它,Eclipse会自动导入正确的东西。

【讨论】:

注意:如果您确实想使用充气机,您需要将getMenuInflater() 换成getSupportMenuInflater() 在我的例子中,我忘记扩展 SherlockFragment 而不是 Fragment。 您还需要确保您的主要活动像这样扩展 ABS:“public class MainActivity extends SherlockActivity ”【参考方案3】:

我在我的活动中使用 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;
    

    ...


【讨论】:

谢谢。 getSupportMenuInflater() 而不是标准的getMenuInflater() 是一个决定。【参考方案4】:

遇到了同样的问题,但那是因为我在 Fragment 中使用了错误的 onCreateOptionsMenu 方法!

布尔值onCreateOptionsMenu(Menu menu) 仅用于活动。

@Override //For Activities
public boolean onCreateOptionsMenu(Menu menu)  
...

必须将其移至包含 Fragment 的活动类。

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

【讨论】:

【参考方案5】:

哎哟!!!那是一个很好的!

我在 MyFragment 中导入了 android.view.Menu 而不是 android.support.v4.Menu!

我在这个上浪费了几个小时!希望这篇文章至少可以帮助其他人。

【讨论】:

【参考方案6】:

试试这个,其实IDE混淆了bw native menu import和Sherlock import..所以如果我们明确指定它就会解决..

@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


【讨论】:

【参考方案7】:
@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) 
    // TODO Auto-generated method stub
    getSupportMenuInflater().inflate(R.menu.main, menu);
    return true;

【讨论】:

【参考方案8】:

刚刚在 Xamarin 上的活动中遇到了同样的问题。 它期望该方法将 Xamarin.ActionbarSherlockBinding.Views.IMenu 作为参数。

如何找到: - 注释您开始实现的 OnCreateOptionsMenu 方法。 - 在某些工作方法中开始输入 OnCreateOptionsMenu 就像你想调用它一样。 - 从建议列表中选择它。 - 将光标放在 OnCreateOptionsMenu 调用上。 -按 Command+d 进入程序集浏览器。您将从实现中看到接口。 - 然后通过在它所采用的参数类型上按下鼠标指针,您将进入该类型实现的界面。 - 你会看到它所在的命名空间。

【讨论】:

【参考方案9】:

我遇到了同样的问题,这就是我使用 Fragment 的 onCreateOptionsMenu 所做的。 覆盖 Fragment 的 onCreate 方法,并确保使用 setHasOptionsMenu 方法,参数值为“true”,让系统知道 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);

【讨论】:

【参考方案10】:

我用过我用过的 com.actionbarsherlock.view.Menu - 也许从那以后它已经改变了?

【讨论】:

以上是关于无法覆盖 ListFragment 中的 onCreateOptionsMenu的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ListFragment 添加到布局中

ListFragment OnListItemClick 未被调用

Android:无法让 Checkbox OnClickListener 在 ListFragment 中工作

在 ListFragment 中无法识别 findViewById [重复]

我无法从 ListFragment 内的 onListItemClick 开始新活动

viewpager 内无法解释的 ListFragment 行为