第一次打开菜单时,果冻豆没有调用onPrepareOptionsMenu()

时间:2012-10-14 21:35:59

标签: android android-4.1-jelly-bean

我在onPrepareOptionsMenu上覆盖隐藏和显示菜单项。使用API​​级别16仿真器进行测试时;第一次打开菜单时不调用onPrepareOptionsMenu。但是,当我重新打开菜单时,它可以工作。问题仅在于第一次使用。你可以用它来简单地测试它;

@Override
public void onPrepareOptionsMenu(Menu menu) {
    Toast.makeText(this.getActivity(), "pre", Toast.LENGTH_SHORT).show();
    super.onPrepareOptionsMenu(menu);
}

有什么想法吗?

2 个答案:

答案 0 :(得分:17)

每次用户打开Gingerbread及其下方的菜单时,都会调用

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);
}