3

ListView と「詳細」ビューの 2 つのフラグメントがあります。各フラグメントには、独自のメニュー オプションがあります。両方のフラグメントが表示されるランドスケープ モードの場合、各メニューは 1 つにマージされます (これは設計によるものだと思います)。そこにいる。質問にコードを含める必要があるかどうかわかりません。

編集:

この質問を見つけましたが、 menu.clear() を追加すると、詳細ビ​​ューのメニュー オプションのみが表示されます。横向きで縦向きに戻すと、メニューは変更されません。

より大きな問題は、それぞれ独自のメニュー オプション セットを持つフラグメントをどのように処理するかということだと思います。

アップデート:

明確にするために、デバイスが縦向きまたは横向きのモードのままになっている場合、メニューは正常に機能します. この問題は、横向きから縦向きに、またはその逆に回転するときに発生します。を呼び出してもメニューがリセットされないようですonCreateOptionsMenu

4

3 に答える 3

2

私はここで新しいので、すべてを一流にフォーマットしなかった場合はお詫びします。私もメニューの貢献とFragmentsに関して同様の質問をしました。これが私のインスタンスで行ったことです...

私はFragmentActivityホスティングListFragmentと、選択されたリストアイテムの詳細を含む追加のものを持っています-Fragmentかなり典型的なタブレット構成。この追加の詳細Fragmentは、リストアイテムが選択されるまで追加されません...リストアイテムを選択するときに、 sメニューアイテムがホスティングアクションバーListFragmentに寄与しないようにします。FragmentActivity(UIの観点から、ユーザーの主な焦点は新しく追加されたフラグメントです。以前の状態に戻すには、選択したアイテムの選択を解除します。)ListFragment再利用性を確保するために他のフラグメントについて知る必要がないためonPrepareOptionsMenu(..)、レベルはFragmentActivity私にとって正しい前進でした。

このコードスニペットをホスティングに追加してFragmentActivity、必要な動作をすばやく取得します。

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
   // 'Find' the menu items that should not be displayed - each Fragment's menu has been contributed at this point. 
   menu.findItem(id.sync).setVisible(false);
 }
return super.onPrepareOptionsMenu(menu);
}

この方法は、フラグメントが再利用可能なままである(最初に設計されたとおりに貢献している)が、ホストFragmentActivityが許可された役割の1つであるアクティビティUIを操作できることを意味します。

それがお役に立てば幸いです。

于 2012-04-21T14:46:50.167 に答える
1

使用しているsetRetainInstance(true)場合、メニューが更新されません。残念ながら、このブレークを削除すると、向きを変更すると AsyncTask が強制終了されるなどの他のことが中断されます。

于 2012-04-15T22:37:56.600 に答える
0

向きが変わるたびに膨張したメニューをアクションバーに更新したいので、フラグメントを保持するマニフェスト内のアクティビティが構成の変更をリッスンすることを宣言しようとします

次に、onConfigurationChanged メソッドをオーバーライドし、invalidateOptionMenu API を使用します。次のリンクを参照してください。

アクティビティ無効化オプション メニュー:

http://developer.android.com/reference/android/app/Activity.html#invalidateOptionsMenu%28%29

これが役に立った場合は、この投稿を回答としてマークしてください。

ありがとう。

于 2012-04-19T02:16:31.847 に答える