それぞれが独自のChild Fragment Managersを使用してドリルダウンナビゲーションを提供する3つの 'トップレベル'フラグメントのセットを持っています。これらの最上位フラグメントは、主アクティビティーのサポート・フラグメント・マネージャーを使用して置換されることによって、切り替えられます。フラグメントが置換されたときにフラグメントによってツールバーのメニューオプションが追加される
この最上位フラグメントの1つに、setHasOptionsMenu()
とonCreateOptionsMenu()
を使用してメニューオプションをツールバー/アクションバーに追加する子フラグメントがあり、うまく動作します。
は、今私はちょうど気づいた問題はこれです:
新しい子フラグメントが追加され、メニュー項目を持つ子フラグメントが隠されている(とトランザクションがトップレベルのフラグメントのbackstackに追加)する場合、メニュー項目が消えます。同様に、トランザクションを元に戻すことでフラグメントが再び表示されると、メニュー項目が戻ってきます。これは望ましい動作であり、フラグメントフレームワークによって完全に処理されているようです。
HOWEVER、子フラグメントが表示され、そのメニューアイテムがツールバーに表示され、トップレベルのフラグメントを切り替えると、メニュー項目はツールバーに残ります。
これは、それが属する子フラグメントだけがダンプされているだけでなく、親フラグメント(トップレベルフラグメントのもの)も完全に置き換えられたバックスタッキングには、まっすぐ上に置き換えられます)。
私は、着信している最上位フラグメントが再開したときに常にアクティビティにinvalidateOptionsMenu()
を呼び出すことができますが、トップレベルのフラグメント内をナビゲートするときに自動的に処理されるように、 。
おかげで、私はすでに本当に活動の独自のbackstackからのような独立したbackstacksを果たすだけの空の断片である私のトップレベルの断片と同様のセットアップを持っています。これらのフラグメントは、多くのライフサイクルイベントや戻るボタンの押下などのアクティビティとインターフェースします。私はこの方法で 'invalidateOptionsMenu()'を簡単に使うことができましたが、フラグメントがただ隠れているのにChild Fragment Managerでメニューが自動的に管理されているように見えますが、Activity Fragでは表示されません。フラグメントが完全に置き換えられたときのマネージャ。私は何かが欠けているように感じる。 – RobertoCuba