果冻豆没有要求onPrepareOptionsMenu首次打开菜单时()(Jelly bean no

2019-09-24 02:32发布

我重写onPrepareOptionsMenu隐藏和显示菜单项。 当API级别16模拟器测试它; 首次打开菜单时onPrepareOptionsMenu不叫。 但是,当我重新打开菜单它的工作原理。 问题是,只有在第一次使用。 这样,你可以简单的测试;

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

有任何想法吗?

Answer 1:

onPrepareOptionsMenu()被调用每个用户打开上姜饼和下面的菜单时间。 从蜂巢了选项菜单,假设永远是开放的,当项目出现在动作条。

如果你想在你的活动生命周期和内更新选项菜单onPrepareOptionsMenu()需要调用回调invalidateOptionsMenu()onPrepareOptionsMenu()将被调用。

你能不能落实在您第一次使用的代码onCreateOptionsMenu()回调? 这就是所谓的每次创建选项菜单的时间,它是在第一次使用创建的。



Answer 2:

这是Android的错误: 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);
}


文章来源: Jelly bean not calling onPrepareOptionsMenu() when opening the menu for the first time