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

Fla*_*dun 13 java android android-menu android-fragments

我试图在继承Fragment该类的类中夸大菜单.这是我的OnCreateOptionsMenu()方法 -

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

这会引发以下错误:

无法解析方法'getMenuInflater()'

我试过了 :

MenuInflater inflater = getActivity().getMenuInflater();
Run Code Online (Sandbox Code Playgroud)

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

方法不会覆盖其超类的方法

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

public MenuInflater getMenuInflater() {
    return new MenuInflater(this);
}
Run Code Online (Sandbox Code Playgroud)

但然后抛出以下错误:

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

error:方法不会覆盖或实现超类型的方法

我该怎么办?

小智 13

您的签名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);
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然该方法正确解析,但我仍然无法让“方法不会从超类型重写”消失。 (2认同)

Mar*_*cas 5

在您的片段类中添加:

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

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

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

setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)