动态修改actionbar的Menu菜单中的显示内容
当我们在给Actionbar添加一个menu菜单的时候一般使用onCreateOptionsMenu(Menu menu)这个方法,但这个onCreateOptionsMenu方法在整个Activity的生命周期中只被调用一次,对于动态的修改menu的内容显然不适用。
Android给我们提供了一个onPrepareOptionsMenu(Menu menu),我们可以通过这个方法,来获取menu对象,并进行修改。
下面我们来看一下效果:
上面示例中的内容展示部分是在最外层的Activity中填充的Fragment,因此当我们点击底部的导航栏的时候,作为容器的Activity的menu菜单就需要根据不同的页面做出对应的变化。
下面我们看一下该如何实现:
1.在menu文件夹下创建menu.xml,并创建所有我们需要的菜单项(注意:需要一次性创建出所有的菜单项,前面讲到的动态修改指的是根据不同的页面来确定这个菜单是显示还是隐藏)
2.首先我们定一个枚举类型来标记当前所在的页面:
private enum CurrentPage{
HOME,
GOODS,
SHOPPING_CART
}
3.创建一个全局变量用来记录当前所在的页面,记录的同时调用 invalidateOptionsMenu() 方法来刷新menu的显示内容
4.重写 onPrepareOptionsMenu(Menu menu) 并根据当前所在的页面确定菜单的显示或者隐藏
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
//主页
if(mCurrentPage == CurrentPage.HOME){
menu.findItem(R.id.action_home_category).setVisible(false);
menu.findItem(R.id.action_home_remove).setVisible(false);
//商品
}else if(mCurrentPage == CurrentPage.GOODS){
menu.findItem(R.id.action_home_category).setVisible(true);
menu.findItem(R.id.action_home_remove).setVisible(false);
}else {
menu.findItem(R.id.action_home_category).setVisible(false);
menu.findItem(R.id.action_home_remove).setVisible(true);
}
return super.onPrepareOptionsMenu(menu);
}