动态修改actionbar的Menu菜单中的显示内容

动态修改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);
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值