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

问题描述 投票:13回答:4

我试图在继承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

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

我该怎么办?

java android android-fragments android-menu
4个回答
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
投票
  • 根据APIoverriding super方法。
  • 你没有调用正确的方法inflate

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

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

1
投票

使用此代码:

@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。还要在setHasOptionsMenu(true);中添加OnCreateView(),以便片段调用该方法。

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


1
投票

在你的片段类中添加:

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

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

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

setHasOptionsMenu(true);
© www.soinside.com 2019 - 2024. All rights reserved.