android getMenuInflater() in a fragment subclass - 無法解析方法

我正在尝试在继承该类的类中膨胀菜单。这是我的方法 -FragmentOnCreateOptionsMenu()

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

这将引发以下错误:

无法解析方法'getMenuInflater()'

我试过了:

MenuInflater inflater = getActivity().getMenuInflater();

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

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

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

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

但随后抛出以下错误:

错误:不兼容的类型:无法将预测碎片转换为上下文

错误:方法不覆盖或实现超类型中的方法

我该怎么办?


答案 1

您的签名看起来不对。查看此处的文档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

在片段类中添加:

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

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

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

setHasOptionsMenu(true);

推荐