- ActionBarメニューの表示/非表示を切り替える
- Fragmentにメニューを表示させる
ActionBarメニューの表示/非表示を切り替える
概要
ActionBarActivity
なActivityのActionBarにあるメニュー(options menu)について、
MenuItem item = menu.findItem(R.id.menu_id);
item.setVisible(false);
をしても消えてくれなかったoptions menuを何とかして消す
やり方
Activity
// 初期状態ではmenuを表示させる
private boolean menuVisible = true;
private MenuItem menuToggleVisible;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_activity, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
menuToggleVisible = menu.findItem(R.id.menu_toggle_visible);
menuToggleVisible.setVisible(menuVisible);
return true;
}
private void toggleMenuVisible() {
menuVisible != menuVisible;
invalidateOptionsMenu();
}
このようにonPrepareOptionsMenu
の中でsetVisible
を呼び出せるようにしておく
そして、invalidateOptionsMenu()
によって内部でonPrepareOptionsMenu
がcallされ、
menuの表示/非表示が切り替えられる
参考
Fragmentにメニューを表示させる
Activityの上に乗せたFragmentごとにmenuを表示させたい
やり方
Fragment
private MenuItem menuItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
// ...
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) {
super.onCreateOptionsMenu(menu, menuInflater);
// menu.add(groupId, itemId, order, title);
menuItem = menu.add(Menu.NONE, 0, 100, getString(R.string.menu_item));
menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}
まずonCreate
でsetHasOptionsMenu(true)
をcallしておく
そして、onCreateOptionsMenu
でoptions menuを作成する
ここではJavaだけでmenuを作成している