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();