バックグラウンド
フラグメントに関するAndroidWebサイトのサンプルに示されているのと同様のシナリオがあります(リンクはこちら):
- 小画面、縦向き:単一ペイン
- 小さな画面、横向き:単一ペイン
- 7インチタブレット、縦向き:単一ペイン
- 7インチタブレット、横向き:デュアルペイン、ワイド
- 10インチタブレット、ポートレート:デュアルペイン、ナロー
- 10インチタブレット、横向き:デュアルペイン、ワイド
- テレビ、横向き:デュアルペイン、ワイド
私の場合のアクションバーは常に表示されており、今のところアクションアイテムしかありません。
問題
次のシナリオは非常に奇妙です。
デバイスには、縦向き用に1つのペイン、横向き用に2つのペインがあります。
私のフラグメントは両方とも、独自のアクションバーアイテムを作成します。
ポートレートからランドスケープに切り替えると、すべてのアクションアイテムが表示されます(これが私が欲しいものです)
横向きから縦向きに切り替えると、すべてのアクションアイテムが表示されます。
右側のペインが存在しないため、これはあまり意味がありませんが、何らかの理由でそのフラグメントがfragmentManagerに存在しているように見え、まったく表示されていなくてもonCreateOptionsMenuが呼び出されます。
私が試したこと
両方のフラグメントを保持するアクティビティでinvalidateOptionsMenu()を呼び出そうとしましたが、役に立ちませんでした
また、フラグメントごとに次のコードを追加しました。これは完全に機能します。
@Override
public void onStart() {
super.onStart();
setHasOptionsMenu(true);
}
@Override
public void onStop() {
super.onStop();
setHasOptionsMenu(false);
}
質問
なぜそれが起こるのですか?
optionsMenuを有効/無効にする(したがって、フラグメントによるアクションバーアイテムの作成を有効/無効にする)私のソリューションは実行可能なソリューションですか?より良い解決策はありますか?
そもそもフラグメントにアクションアイテムを処理させるのもいいことでしょうか?