在Fragment中使用Menu

在Fragment中使用Menu

如何在切换fragment时显示不同的menu呢?相信很多同学都会想到使用onCreateOptionsMenu(Menu menu, MenuInflater inflater)方法,然而它并没有和我们期望的那样把菜单显示出来。这时你就想了,看来这个方法并没有什么卵用,那为什么会存在这个方法呢?于是你就开始各种百度谷歌,最后你终于发现了,要这么干:

public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
}

果然,这样是可以的。那么为什么为这样呢?来看看源码,你就会明白的。

public void setHasOptionsMenu(boolean hasMenu) {
    if (mHasMenu != hasMenu) {
        mHasMenu = hasMenu;
        if (isAdded() && !isHidden()) {
            mActivity.supportInvalidateOptionsMenu();
        }
    }
}

只有在hasMenu为true时,才会更新创建menu。
然而这并不是今天的“硬菜”。有的时候你切换语言版本时你会发现menu又加载了一次。具体原因我也母鸡,可是怎么办呢?我的具体做法是在加载menu的xml之前使用menu.clear()方法清除menu。

如果想要手动刷新menu怎么办?在Activity中有invalidateOptionsMenu()方法可以使用,在fragment中怎么弄?很简单:

getActivity().supportInvalidateOptionsMenu();

看到这里,你可能觉得这篇文章其实并没有什么卵用,确实如此。只是对自己项目中一些经验的总结。同时也希望能帮助到其他人。

注:这里的Fragment使用的是support v4包中的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值