ActivityにTabLayoutを使って複数のFragmentを表示する場合ってありますよね。
ディズニー待ち時間でもそのように実装しています。
「このFragmentが見えているときはこのOptionMenuだけど、このFragmentのときはこのOptionMenuにしたい!」と思ったりもします。
そのような時の対処方法です。
普通にActivityでOptionMenuを作る方法
普通にActivityで書くとこうですね。
MainActivity.java
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.option_menu, menu);//Menu Resource, Menu
return true;
}
何かの動作の時(例えばonTabSelected
など)にinvalidateOptionsMenuを呼んで再描画してもできますが、もっと簡単にできます
FragmentごとにOptionMenuを変えたい場合
上記のonCreateOptionsMenu()
をそれぞれのFragmentでやればOKです。
FirstFragment.java
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.option_menu_first, menu);
}
SecondFragment.java
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.option_menu_second, menu);
}
option_menu_first.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_first_a"
android:title="@string/first_a"
/>
<item
android:id="@+id/menu_first_b"
android:title="@string/first_b"/>
</menu>
option_menu_second.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_second_a"
android:title="@string/second_a"
/>
<item
android:id="@+id/menu_second_b"
android:title="@string/second_b"/>
</menu>
以上です