我在onPrepareOptionsMenu上覆盖隐藏和显示菜单项。使用API级别16仿真器进行测试时;第一次打开菜单时不调用onPrepareOptionsMenu。但是,当我重新打开菜单时,它可以工作。问题仅在于第一次使用。你可以用它来简单地测试它;
@Override
public void onPrepareOptionsMenu(Menu menu) {
Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show();
super.onPrepareOptionsMenu(menu);
}
有什么想法吗?
答案 0 :(得分:17)
onPrepareOptionsMenu()
。从Honeycomb向上,当ActionBar中存在项目时,假设选项菜单始终处于打开状态。
如果您想在活动生命周期内和onPrepareOptionsMenu()
回调中更新选项菜单,则需要致电invalidateOptionsMenu()
并调用onPrepareOptionsMenu()
。
您是否可以在onCreateOptionsMenu()
回调中实现首次使用的代码?每次创建选项菜单时都会调用它,并在首次使用时创建它。
答案 1 :(得分:5)
这是android bug:https://code.google.com/p/android/issues/detail?id=24231
当您第一次按菜单按钮时,如果您使用支持库,请致电invalidateOptionsMenu()
或supportInvalidateOptionsMenu()
。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode) {
case KeyEvent.KEYCODE_MENU:
if(mIsMenuFirstClick) {
mIsMenuFirstClick = false;
supportInvalidateOptionsMenu();
}
}
return super.onKeyDown(keyCode, event);
}