blog.petitviolet.net

Androidのoptions menuまわりのtips

2014-11-28

QiitaJavaAndroid
  • 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);
}

まずonCreatesetHasOptionsMenu(true)を call しておく そして、onCreateOptionsMenuで options menu を作成する ここでは Java だけで menu を作成している

参考

from: https://qiita.com/petitviolet/items/da5a686556e65a9b5d9a