除了删除它们之外,您还可以隐藏不想显示的按钮。
例如:
private boolean isPlaying;
MenuItem mPlayMenuItem;
MenuItem mPauseMenuItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.actionbarlogic, menu);
mPlayMenuItem = menu.findItem(R.id.action_play);
mPauseMenuItem = menu.findItem(R.id.action_pause);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_play:
isPlaying = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
return true;
case R.id.action_pause:
isPlaying = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
super.onPrepareOptionsMenu(menu);
if (isPlaying) {
mPlayMenuItem.setVisible(false); // hide play button
mPauseMenuItem.setVisible(true); // show the pause button
} else if (!isPlaying) {
mPlayMenuItem.setVisible(true); // show play button
mPauseMenuItem.setVisible(false); // hide the pause button
}
return true;
}
请注意,这是:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
this.invalidateOptionsMenu();
}
需要更新操作栏。 在3.0设备之后,操作栏不会自动更新。 因此,您必须手动告诉它调用“ OnPrepareOptionsMenu(Menu)”,以便它将通过调用“ Activity.invalidateOptionsMenu()”来刷新项目。
希望这可以帮助!
参考:[/reference/android/app/Activity.html#onPrepareOptionsMenu(android.view.Menu)]
[/reference/android/support/v4/app/ActivityCompat.html#invalidateOptionsMenu(android.app.Activity)]