我试图在继承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:方法不会覆盖或实现超类型的方法
我该怎么办?
你的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);
}
使用此代码:
@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'。它避免了混淆。
在你的片段类中添加:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.[IDMENU], menu) ;
}
其中[IDMENU]是菜单的XML名称。
接下来,您需要在onCreate或onCreateView方法中添加:
setHasOptionsMenu(true);