异步刷新menu :getActivity().supportInvalidateOptionsMenu();
onPrepareOptionsMenu
每次访问都重新填充菜单项
onCreateOptionsMenu
1. onPrepareOptionsMenu()调用时机。
一般情况下,每次按menu键Framewrok都会先调用onPrepareOptionsMenu(),准备需要显示的菜单。但是当按menu键之前调用了Activity.invalidateOptionsMenu()之后,情况变的不一样,调用完Activity.invalidateOptionsMenu()之后,Framework会立即调用onPrepareOptionsMenu()准备好菜单项数据,之后当用户按menu键时,Framework不会再次调用onPrepareOptionsMenu(),而是将之前准备好的菜单显示出来。这点一定要注意。
2. 清除之前的menu数据。
每次调用onPrepareOptionsMenu()的时候需要首先调用menu.clear()清除一下之前的menu数据,如果不清除的话,之前的menu数据不会被释放,造成内存泄漏。
1、复写onPrepareOptionsMenu方法
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();//先清除已经建好的menu
MenuInflater inflater = getActivity().getMenuInflater();
//根据各种条件,重新设置menu
if (isDeleteIconOnActionBar){
inflater.inflate(R.menu.delete_action, menu);
}else if(isRefreshIconOnActionBar){
inflater.inflate(R.menu.delete_refresh_action, menu);
}else{
inflater.inflate(R.menu.main_activity_actions, menu);
}
super.onPrepareOptionsMenu(menu);
}
2、在需要修改menu的地方调用
getActivity().supportInvalidateOptionsMenu();