web-dev-qa-db-ja.com

androidフラグメントサブクラスのgetMenuInflater()-メソッドを解決できません

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をコンテキストに変換できません

エラー:メソッドはスーパータイプのメソッドをオーバーライドまたは実装しません

私は何をしますか?

13
Flame of udun

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

フラグメントクラスに以下を追加します。

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

ここで、[IDMENU]はメニューのXML名です。

次に、onCreateまたはonCreateViewメソッドの内部に次のように追加する必要があります。

setHasOptionsMenu(true);
2
Marco Concas

このコードを使用してください:

_@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」という単語を含めるのが標準的な方法です。それは混乱を避けます。

1
McGuile

次のように使用する必要があります。

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