Android Menuの動的変更処理

ToolbarのメニューなどでMenuを動作的に変更したい。

例えば、ActivityとFragmentの構成だとする。
そして、FragmentからActivityのメニューを操作したい場合、以下のように
menuTypeでメニューを選択できるようにする。

xxxActivity

    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        switch (menuType) {
            case MENU_TYPE_A:
                getMenuInflater().inflate(R.menu.main_menu_a, menu);
                break;
            case MENU_TYPE_B:
                getMenuInflater().inflate(R.menu.main_menu_b, menu);
                break;
            case MENU_TYPE_C:
                getMenuInflater().inflate(R.menu.main_menu_c, menu);
                break;
            default:
                break;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.hoge_menu:
                // 何らかの処理
                return true;
        }
        return false;
    }
    

xxxFragment
Fragmentでは、以下のようにセットするだけで、xxxActivityのonCreateOptionsMenu()が呼ばれるので動的なメニュー表示が可能になる。

if (◯) {
  xxxActivity.menuType = 1;
}
else if (◯◯) {
  xxxActivity.menuType = 2; 
}
else {
  xxxActivity.menuType = 3;
}
getActivity().getFragmentManager().invalidateOptionsMenu();