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

syl*_*loc 9 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);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

IKa*_*agh 17

onPrepareOptionsMenu()每次用户打开Gingerbread及其下方的菜单时都会调用.从Honeycomb向上,当ActionBar中存在项目时,假定选项菜单始终处于打开状态.

如果您想在活动生命周期期间和onPrepareOptionsMenu()回调中更新选项菜单,则需要调用invalidateOptionsMenu()onPrepareOptionsMenu()调用.

您是否可以在onCreateOptionsMenu()回调中实现首次使用的代码?每次创建选项菜单时都会调用它,并在首次使用时创建它.


Evg*_*eny 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);
}
Run Code Online (Sandbox Code Playgroud)

  • 工作得很漂亮,谢谢!请注意,在某些情况下,它应该是`ActivityCompat.invalidateOptionsMenu(this);`. (2认同)