版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zqd1984309864/article/details/78135363
先来看一下效果:
有两个比较重要的方法,onCreatOptionMenu创建选项菜单,onPrepareOptionsMenu用于更新菜单,
相关代码如下:
/**
* 创建选项菜单
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
Log.i("zqd", "onCreateOptionsMenu");
getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
}
/**
* 准备更新菜单
*
* @param menu
* @return
*/
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
Log.i("zqd", "onPrepareOptionsMenu");
switch (currentMenu) {
case 0:
menu.findItem(R.id.action_choose).setVisible(true);
menu.findItem(R.id.action_calcle).setVisible(false);
break;
case 1:
menu.findItem(R.id.action_choose).setVisible(false);
menu.findItem(R.id.action_calcle).setVisible(true);
break;
}
return super.onPrepareOptionsMenu(menu);
}
可以看到在创建选项菜单中填充了MENU,在刷新菜单方法中,进行了menu中item的显示和隐藏操作,那么什么时候去执行onPrepareOptionsMenu中的代码呢,
private void changeCurrentMenu() {
if (currentMenu == 0) {
currentMenu = 1;
} else if (currentMenu == 1) {
currentMenu = 0;
}
invalidateOptionsMenu();
}
这里currentMenu指的是目前显示第几个item项目,最后一行
invalidateOptionsMenu();
执行之后会执行onPrepareOptionsMenu方法,相当于刷新了Menu从而得到了点击刷新menu文字的效果