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

时间:2015-06-15 13:57:53

标签: java android android-fragments android-menu

我正在尝试在继承Fragment类的类中夸大菜单。 这是我的OnCreateOptionsMenu()方法 -

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

这会引发以下错误:

  

无法解析方法'getMenuInflater()'

我试过了:

MenuInflater inflater = getActivity().getMenuInflater();

但Android Studio以红色突出显示@Override并声明:

  

Method不会覆盖超类

中的方法

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

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

但随后会抛出以下错误:

  

错误:不兼容的类型:ForecastFragment无法转换为   上下文

     

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

中的方法

我该怎么办?

4 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:1)

使用此代码:

set(gca,'XTickLabel',{' '})
set(gca,'YTickLabel',{' '})

其中forecastID是菜单forcastfragment.xml中项目的ID。 同时在@Override public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.forecastfragment, menu) ; final MenuItem item = menu.findItem(R.id.forecastID); } 中添加setHasOptionsMenu(true);,以便片段调用该方法。

作为一方,标准做法是在菜单文件名中加入“menu”一词,例如'forecastfragment_menu.xml'。它避免了混淆。

答案 2 :(得分:1)

  • 根据API而非overriding super方法。
  • 您没有使用正确的方法inflate

您必须以这种方式使用它:

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

答案 3 :(得分:1)

在您的片段类中添加:

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

[IDMENU]是菜单的XML名称。

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

setHasOptionsMenu(true);