1

バックグラウンド

フラグメントに関する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を有効/無効にする(したがって、フラグメントによるアクションバーアイテムの作成を有効/無効にする)私のソリューションは実行可能なソリューションですか?より良い解決策はありますか?

そもそもフラグメントにアクションアイテムを処理させるのもいいことでしょうか?

4

2 に答える 2

0

私は通常、単一ペインの場合、フラグメントにアクションバーアイテムのみを処理させます。論理的には、表示されているフラグメントがその時点ですべての画面スペースを所有します。画面の領域が限られているため、アクションバーを使用するのが理にかなっています。デュアルペインの場合、各フラグメントのUIを独自のフラグメント内に保持し、アクションバーを使用しない傾向があります。ただし、シナリオで視覚的に意味がある場合は、それができない理由はわかりません。

私の理解では、構成変更前に存在していたフラグメントのセットは、構成変更後に再作成されます。Androidは、アクティビティのレイアウトファイルなどに依存しません。作成したフラグメントはすべて、構成の変更後も保持される状態であると見なされます。アクティビティが破棄されているときに、不要になる可能性のあるフラグメントを手動で削除してみてください。その後、存在する必要がある場合は、Androidを使用してレイアウトからフラグメントを再作成してください。ただし、これは知識に基づいた熟考であり、テストされていません。

それは私があなたの現在の解決策に何も悪いことを見ないと言った。

于 2013-03-20T16:39:50.950 に答える
0

onPrepareOptionsMenu(..)右側のフラグメントの方法で、Configurationから取得可能なものを確認することにより、必要に応じてメニュー項目を非表示および表示できますgetResources().getConfiguration()

他の答えが言うように、実行時に表示されるフラグメントの量を変更することは一般的に望ましくありません-私のアプリはこれを行うために使用され、私は何千もの問題に遭遇しました。

于 2013-03-20T16:42:01.820 に答える