LoginSignup
35
44

More than 5 years have passed since last update.

Androidのoptions menuまわりのtips

Posted at
  • 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を作成している

参考

35
44
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
35
44