android 片段子类中的 getMenuInflater() - 无法解析方法

android getMenuInflater() in a fragment subclass - cannot resolve method

我正在尝试在继承 Fragment class 的 class 中扩充菜单。 这是我的 OnCreateOptionsMenu() 方法 -

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

这会引发以下错误:

Cannot resolve method 'getMenuInflater()'

我试过了:

MenuInflater inflater = getActivity().getMenuInflater();

然后 Android Studio 以红色突出显示 @Override 并指出:

Method does not override method from its superclass

我还尝试在同一个 class 中创建一个 getMenuInflater 方法并使用它 return new MenuInflater(this)

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

但随后抛出以下错误:

error: incompatible types: ForecastFragment cannot be converted to Context

error: method does not override or implement a method from a supertype

我该怎么办?

使用此代码:

@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.forecastfragment, menu) ;
    final MenuItem item = menu.findItem(R.id.forecastID);
}

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

另一方面,标准做法是在菜单文件名中包含单词 'menu',例如 'forecastfragment_menu.xml'。它避免了混淆。

  • 根据API not overriding a super方法。
  • 您没有调用正确的方法inflate

你必须这样使用它:

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

onCreateOptionsMenu 的签名看起来不对。查看文档 here

看看这段代码

@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);
}

在您的片段中 class 添加:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.[IDMENU], menu) ;
}

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

接下来你需要在onCreate或onCreateView方法里面添加这个:

setHasOptionsMenu(true);