【Android Tips】FragmentからFragmentを追加した時にActionBarのメニューを切り替える
Fragmentの追加によってビューを切り替える処理をした際に
共通で表示されているActionBar内のメニュー表示を切り替えたかったのでやってみました。
いまFragmentを継承したクラスが2種類あります。
1つ目は画像を表示するFragment。以下(1)と呼びます。
(1)はペンツールなどのメニューをActionBarに持っています。
(Fragment側で追加してるメニューということです)
2つ目は動画を表示するFragment。以下(2)と呼びます。
(2)は独自のメニューを持ちません。
ここで、(1)から(2)を呼び出し追加します。
すると、(2)が表示されていますが、ActionBarには(1)のメニューアイコンが表示されたままになってしまいます。
![]() |
![]() |
そこで、追加された(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)のメニューを非表示に、削除された時は表示というように切り替えが出来るようになりました。
コメントをどうぞ