Menuのmenu itemまたはActionBarのaction itemをコードで動的に制御する


本文には3つの方法がある.
方法1. invalidateOptionsMenu()関数
フレームワークを強制してpublic boolean onCreateOptionsMenu(Menu menu)を再呼び出すことができます. ActionBarのitemまたはmenuのitemを生成
ここでは状態によって各itemの状態を変えることができる.
次のようになります.
@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		if(...     )//  if (mode == MODE.TAB ) {//mode  MODE.TAB     
			int ct = menu.size();
			for (int i = 0; i < ct; i++) {
				MenuItem mi = menu.getItem(i);
				mi.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
			}
		}
		return true;
	}

注意:
invalidateOptionsMenu()この方法はAPI 11以上でしか使えませんが、
しかし、V 4パッケージのFragmentActivityでは、同様の方法が提供されています.
メソッド2.onPrepareOptionsMenu関数 
通常、menuキーFramewrokを押すたびにonPrepareOptionsMenu()が呼び出され、表示するメニューが用意されます.
注意:この方法はmenuボタンを押さなければならない.押さないとonPrepareOptionsMenuにならない.この点に注意しなければならない.
@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		if (mode == MODE.TAB ) {
			int ct = menu.size();
			for (int i = 0; i < ct; i++) {
				MenuItem mi = menu.getItem(i);
				mi.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
			}
			preventMenuKey(true);
		}
		return true;
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

方法3:invalidateOptionsMenu
mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);