android 片段子类中的 getMenuInflater() - 无法解析方法
android getMenuInflater() in a fragment subclass - cannot resolve method
我正在尝试在继承 Fragment
class 的 class 中扩充菜单。
这是我的 OnCreateOptionsMenu()
方法 -
@Override
public boolean OnCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.forecastfragment, menu) ;
return true;
}
这会引发以下错误:
Cannot resolve method 'getMenuInflater()'
我试过了:
MenuInflater inflater = getActivity().getMenuInflater();
然后 Android Studio 以红色突出显示 @Override
并指出:
Method does not override method from its superclass
我还尝试在同一个 class 中创建一个 getMenuInflater
方法并使用它 return new MenuInflater(this)
public MenuInflater getMenuInflater() {
return new MenuInflater(this);
}
但随后抛出以下错误:
error: incompatible types: ForecastFragment cannot be converted to
Context
error: method does not override or implement a method from a supertype
我该怎么办?
使用此代码:
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecastfragment, menu) ;
final MenuItem item = menu.findItem(R.id.forecastID);
}
其中 forecastID 是菜单中项目的 ID forcastfragment.xml。
还要在 OnCreateView()
中添加 setHasOptionsMenu(true);
以便片段将调用该方法。
另一方面,标准做法是在菜单文件名中包含单词 'menu',例如 'forecastfragment_menu.xml'。它避免了混淆。
你必须这样使用它:
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecastfragment, menu);
return true;
}
您 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);
}
在您的片段中 class 添加:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.[IDMENU], menu) ;
}
其中 [IDMENU] 是菜单的 XML 名称。
接下来你需要在onCreate或onCreateView方法里面添加这个:
setHasOptionsMenu(true);
我正在尝试在继承 Fragment
class 的 class 中扩充菜单。
这是我的 OnCreateOptionsMenu()
方法 -
@Override
public boolean OnCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.forecastfragment, menu) ;
return true;
}
这会引发以下错误:
Cannot resolve method 'getMenuInflater()'
我试过了:
MenuInflater inflater = getActivity().getMenuInflater();
然后 Android Studio 以红色突出显示 @Override
并指出:
Method does not override method from its superclass
我还尝试在同一个 class 中创建一个 getMenuInflater
方法并使用它 return new MenuInflater(this)
public MenuInflater getMenuInflater() {
return new MenuInflater(this);
}
但随后抛出以下错误:
error: incompatible types: ForecastFragment cannot be converted to Context
error: method does not override or implement a method from a supertype
我该怎么办?
使用此代码:
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecastfragment, menu) ;
final MenuItem item = menu.findItem(R.id.forecastID);
}
其中 forecastID 是菜单中项目的 ID forcastfragment.xml。
还要在 OnCreateView()
中添加 setHasOptionsMenu(true);
以便片段将调用该方法。
另一方面,标准做法是在菜单文件名中包含单词 'menu',例如 'forecastfragment_menu.xml'。它避免了混淆。
你必须这样使用它:
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecastfragment, menu);
return true;
}
您 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);
}
在您的片段中 class 添加:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.[IDMENU], menu) ;
}
其中 [IDMENU] 是菜单的 XML 名称。
接下来你需要在onCreate或onCreateView方法里面添加这个:
setHasOptionsMenu(true);