Jelly bean not calling onPrepareOptionsMenu() when opening the menu for the first time

柔情痞子 提交于 2019-12-23 07:38:15

问题


I'm overriding onPrepareOptionsMenu to hide and show menu items. When testing it with the API level 16 emulator; onPrepareOptionsMenu is not called when opening the menu for the first time. But when i reopen the menu it works. The problem is only with the first usage. You can simple test it with this;

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

Any ideas?


回答1:


onPrepareOptionsMenu() is called each time the user opens the menu on Gingerbread and below. From Honeycomb up the Options Menu is assumed to always be open when items are present in the ActionBar.

If you want to update the Options Menu during your activities lifecyle and within the onPrepareOptionsMenu() callback you need to call invalidateOptionsMenu() and the onPrepareOptionsMenu() will be called.

Could you not implement the code for your first usage in the onCreateOptionsMenu() callback? It is called every time the Options Menu is created and it is created on first use.




回答2:


It is android bug: https://code.google.com/p/android/issues/detail?id=24231

When you first time press menu button, call invalidateOptionsMenu() or supportInvalidateOptionsMenu() if you use support library.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch(keyCode) {
    case KeyEvent.KEYCODE_MENU:
        if(mIsMenuFirstClick) {
            mIsMenuFirstClick = false;
            supportInvalidateOptionsMenu();
        }
    }
    return super.onKeyDown(keyCode, event);
}


来源:https://stackoverflow.com/questions/12886751/jelly-bean-not-calling-onprepareoptionsmenu-when-opening-the-menu-for-the-firs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!