在一个片段子类中的android getMenuInflater() - 无法解决方法

14

我正在尝试在继承Fragment类的类中填充一个菜单。 这是我的OnCreateOptionsMenu()方法 -

@Override
public boolean OnCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.forecastfragment, menu) ;
    return true;
}

这引发了以下错误:

无法解析方法 'getMenuInflater()'

我尝试过:

MenuInflater inflater = getActivity().getMenuInflater();

但是然后Android Studio用红色突出显示@Override,并声明:

方法不重写其超类中的方法

我还尝试在同一类中创建一个 getMenuInflater 方法,并让它返回 new MenuInflater(this)

public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}

但是随后会抛出以下错误:

错误:不兼容的类型:无法将ForecastFragment转换为Context

错误:该方法未覆盖或实现自超类型的方法

我该怎么办?

4个回答

16

您的onCreateOptionsMenu的签名看起来不对。请查看此处的文档

请查看此代码

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);//Make sure you have this line of code.
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // TODO Add your menu entries here
    super.onCreateOptionsMenu(menu, inflater);
}

2
虽然该方法解决得很正确,但我仍然无法让“方法不覆盖超类型”消失。 - Flame of udun

5
在您的片段类中添加以下内容:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.[IDMENU], menu) ;
}

其中[IDMENU]是您菜单的XML名称。

接下来,您需要在onCreate或onCreateView方法中添加以下内容:

setHasOptionsMenu(true);

2
使用以下代码:
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.forecastfragment, menu) ;
    final MenuItem item = menu.findItem(R.id.forecastID);
}

其中forecastID是菜单forcastfragment.xml中项目的ID。 还需要在您的OnCreateView()中添加setHasOptionsMenu(true);,以便片段调用该方法。

另外,标准做法是在菜单文件名中包含单词“menu”,例如“forecastfragment_menu.xml”。这样可以避免混淆。


1
  • 根据API,不要重写super方法。
  • 您没有调用正确的inflate方法。

您必须按照以下方式使用它:

@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.forecastfragment, menu);
    return true;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接