前回の質問に対してかなり役立つヒントが得られました。今回も変わらないことを願っています :) まず、状況を説明させてください。2 つのフラグメントを使用するアクティビティがあります。フラグメントごとに xml メニュー レイアウトを作成しました。最初のエントリには 4 つのメニュー エントリがあり、2 番目のエントリには 1 つしかありません。最初に、4 つのメニュー エントリを含むフラグメントがロードされます。そのonCreateメソッドで私が設定した
this.setHasOptionsMenu(true);
onCreateOptionsMenu メソッド
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fragshow, menu);
}
xml ファイルは次のようになります。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_refresh"
android:icon="@drawable/ic_action_search"
android:title="Refresh"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_clearall"
android:icon="@drawable/ic_action_search"
android:title="Clear"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_addcontent"
android:icon="@drawable/ic_action_search"
android:title="Add Content"
android:visible="true"
android:showAsAction="ifRoom|withText" />
<item android:id="@+id/menu_newlist"
android:icon="@drawable/ic_action_search"
android:title="New List"
android:visible="true"
android:showAsAction="ifRoom|withText" />
</menu>
これはうまくいきます。すべてのメニュー項目がそこにあり、それらをクリックして応答できます。「コンテンツの追加」メニューをクリックすると、他のフラグメントがロードされます。そこに私も設定します
this.setHasOptionsMenu(true);
onCreateOptionsMenu メソッド
@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
Log.i("FragCreateList","onCreateOptionsMenu called");
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_fragcreatelist, menu);
}
xml ファイル
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_editdone"
android:icon="@drawable/ic_action_search"
android:title="Edit Done"
android:visible="true"
android:showAsAction="ifRoom|withText" />
</menu>
しかし、新しいフラグメントでは、メニュー項目が表示されません。アクションバーでも、ハードウェアメニューボタンを押したときでもありません。前のフラグメントでは、2 つのメニュー項目がアクションバーにあり、残りの 2 つはハードウェア ボタンが押されたときに表示されました。しかし、ここでは何も表示されません。onCreateOptionsMenu メソッドが呼び出されたという logcat メッセージが表示されますが、何も起こりません。(メニューが表示される直前に呼び出す必要がある(空の)onPrepareOptionsMenuメソッドへの呼び出しも取得しますが、まだ何もありません)何が間違っている可能性がありますか?invalidateOptionsMenu を呼び出しても何も起こりません。さらに、getActivity().invalidateOptionsMenu と getFragmentManager().invalidateOptionsMenu があるため、どちらを呼び出すべきかわかりません。よろしくお願いします。
編集 :
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />