在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包中的。