总结下:
1、方法
1)在onPrepareOptionsMenu里加逻辑处理,因为在调用onCreateOptionsMenu之后,会调用onPrepareOptionsMenu
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem search = menu.findItem(R.id.action_search);
if(currentPage == 1){
search.setVisible(true);
} else {
search.setVisible(false);
}
return super.onPrepareOptionsMenu(menu);
}
2)在要更新菜单项的时候,调用
getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
2、原理
1)在activity里onCreateOptionsMenu 只会被调用一次,而调用getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);会重新调用onCreateOptionsMenu ->onPrepareOptionsMenu,这样就可以实现动态改变actionbar的menuitem了
3、问题
1)在使用过程中遇到一问题,我在界面里加了一个viewpager,当onPageSelected的时候调用getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);会有界面一卡的现象,感觉很不爽
解决:解决办法也简单
mViewPager.postDelayed(new Runnable() {
public void run() {
getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
}
}, 500);
也就是延迟执行,这样的话流畅多了,O(∩_∩)O哈哈~