LoginSignup
2
5

More than 5 years have passed since last update.

AndroidのMenuをFragmentごとに変える方法

Posted at

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>

以上です

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5