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をコンテキストに変換できません
エラー:メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません
私は何をしますか?
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 void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.[IDMENU], menu) ;
}
ここで、[IDMENU]はメニューのXML名です。
次に、onCreateまたはonCreateViewメソッドの内部に次のように追加する必要があります。
setHasOptionsMenu(true);
このコードを使用してください:
_@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()
を追加して、フラグメントがメソッドを呼び出すようにします。
ちなみに、「forecastfragment_menu.xml」のように、メニューファイル名に「menu」という単語を含めるのが標準的な方法です。それは混乱を避けます。
overriding
a super
メソッドではありません。inflate
を呼び出していません。次のように使用する必要があります。
@Override
public boolean OnCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.forecastfragment, menu);
return true;
}