0

次の画像と同じアクティビティがあります。

ハンドセット vs タブレット

FragmentA はリストビューであり、メニュー項目として SearchWidget があります (古いデバイスでは表示されず、API11 以降のみ)。FragmentB は詳細ビューで、いくつかのメニュー項目があります。

ActivityA をタブレットで実行すると、FragmentA + FragmentB のメニュー項目がアクションバーに表示されます。これは正しく、完璧に機能します。

現在、Nexus 7 では、これらの組み合わせが必要です。

  • 縦向きのみハンドセット レイアウトを使用する
  • デバイスを回転させると、タブレット レイアウトが読み込まれます

私が動作していないように見える唯一のものは、アクションバーです。デバイスを横向きモード (タブレット ビュー) から縦向き (ハンドセット ビュー) に戻しても、アクション バーには FragmentA + FragmentB のメニュー項目が表示されます。

ActivityA と FragmentA の両方でinvalidateOptionsMenu()fromを呼び出してみましたが、うまくいきませんでした。onResume()

誰にもアイデアがありますか?

4

2 に答える 2

0

これは私にとってはうまくいきます。アクティビティ A でフラグメント B を見つけて setHasOptionsMenu(mTwoPane) を設定してみてください

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_document_list);

    Fragment fragment = getFragmentManager().findFragmentByTag(TAG_FRAGMENT_DETAIL);

    if (getResources().getBoolean(R.bool.has_detail)){
        mTwoPane = true;

        ....

    }

    if (fragment != null) {
        fragment.setHasOptionsMenu(mTwoPane);
        invalidateOptionsMenu();
    }
}
于 2014-11-11T09:36:44.990 に答える
0

これは、アクティビティの再作成プロセスによるものだと思います。

画面が回転すると、アクティビティは破棄されます (デフォルト)。ただし、破棄される前に、現在アクティブなすべてのフラグメントの状態を含む状態を保存します。後で、向きの変更後にアクティビティが作成されると、保存された状態が復元されます (両方のフラグメントを使用)。詳細フラグメントが復元されると、メニュー項目が追加されます。

これは、ログ ステートメントを追加するか、onCreateViewof でデバッガを使用して確認できますDetailsFragment

あなたの場合は、次の解決策があります。

  1. アクティビティがその状態を保存する前にこのフラグメントを削除することにより、状態の保存を抑制します (DetailsFragment が最後に表示されたアイテムまたは同様のものを追跡する必要がある場合は回避する必要があります)。
  2. 表示されない場合は、DetailsFragment の初期化を抑制します。活動は、可視性についての答えを与える必要があります。
  3. あなたの変種?上記の2つのアプローチでは不十分だと思います...

私の答えがまったく役に立たなかった場合は申し訳ありません

于 2012-12-14T05:23:26.433 に答える