お使いのブラウザは、バージョンが古すぎます。

このサイトは、Internet Explore8・Internet Explore9には対応しておりません。
恐れ入りますが、お使いのブラウザをバージョンアップしていただきますよう宜しくお願いいたします。

【Android Tips】FragmentからFragmentを追加した時にActionBarのメニューを切り替える

Fragmentの追加によってビューを切り替える処理をした際に
共通で表示されているActionBar内のメニュー表示を切り替えたかったのでやってみました。

いまFragmentを継承したクラスが2種類あります。

1つ目は画像を表示するFragment。以下(1)と呼びます。
(1)はペンツールなどのメニューをActionBarに持っています。
(Fragment側で追加してるメニューということです)

2つ目は動画を表示するFragment。以下(2)と呼びます。
(2)は独自のメニューを持ちません。

ここで、(1)から(2)を呼び出し追加します。
すると、(2)が表示されていますが、ActionBarには(1)のメニューアイコンが表示されたままになってしまいます。

postNo4_1 postNo4_2

そこで、追加された(1)側でBackStackChangedListenerを使って表示を切り替えることにしました。

Fragmentの呼び出し追加処理はこんな感じ。

FragmentTransaction ft = manager.beginTransaction();
ft.add(R.id.PageLayout, (Fragment)object, tag);
ft.addToBackStack(null);
ft.commit();

objectは(2)のインスタンスです。
(2)から(1)に戻ってこれるようにするため、addToBackStackでスタックに追加します。

addToBackStackの引数はこのトランザクションにつける名前ですが、今回は必要ないのでnullにしておきます。

これで(1)の上に(2)が追加されました。
続いて(1)のクラス内の処理です。

manager = getFragmentManager();
manager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener(){
       @Override
       public void onBackStackChanged(){
          if(manager.getBackStackEntryCount() != 0){
             actionItem.setVisible(false);
             actionItem2.setVisible(false);
             actionItem3.setVisible(false);
          }else{
             actionItem.setVisible(true);
             actionItem2.setVisible(true);
             actionItem3.setVisible(true);
          }
      }
 });

(1)のクラス内で取得したFragmentManagerにBackStackChangedListenerを追加します。
これで(2)が追加されるとonBackStackChangedイベントが発生するようになります。
同じくremoveされたときもイベントが発生します。
このイベント内でバックスタックの数を監視することで、
追加された時は(1)のメニューを非表示に、削除された時は表示というように切り替えが出来るようになりました。

コメントをどうぞ

メールアドレスは公開されません。* が付いている欄は必須項目です。


お気軽にお問い合わせください。

日本VTR実験室では、お仕事のご依頼、ブログ・コラムのご感想などを受け付けております。
アプリ開発・コンテンツ制作でお困りでしたら、お気軽にご相談ください。
ご連絡お待ちしております。

お問い合わせはこちらから

03-3541-1230

info@nvtrlab.jp

電話受付対応時間:平日AM9:30〜PM6:00