点击Button,做如上切换。代码如下:
public class MainActivity extends ActionBarActivity {
ActionBar actionBar;
boolean b = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (b) {
setTitle("编辑报表");
} else {
setTitle("报表详情");
}
b = !b;
//通知系统更新菜单
supportInvalidateOptionsMenu();
}
});
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
System.out.println("onPrepareOptionsMenu");
menu.clear();
if (b) {
getMenuInflater().inflate(R.menu.main, menu);
} else {
getMenuInflater().inflate(R.menu.main2, menu);
}
return super.onPrepareOptionsMenu(menu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
System.out.println("onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.action_settings:
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
在Button 中调用supportInvalidateOptionsMenu()方法,通知系统刷新菜单,系统会回调onPrepareOptionsMenu 方法,在这里面根据自己的逻辑,进行菜单的处理。
Activity自有 invalidateOptionsMenu 方法,但是它又api的要求,
Call requires API level 11 (current min is 8): android.app.Activity#invalidateOptionsMenu
对于这个效果,我前面是把menu对象给引用为外部变量来操作实现的,今天偶然发现这个方法。
在此,只能感慨 android support包的强大,很多效果都能实现,只是自己的api掌握不够全面。