Android 调用SupportInvalidateOptions菜单()后,菜单操作活动不起作用;

Android 调用SupportInvalidateOptions菜单()后,菜单操作活动不起作用;,android,menu,android-support-library,android-actionbaractivity,Android,Menu,Android Support Library,Android Actionbaractivity,我正在处理库和抽屉菜单的兼容性 调用SupportInvalidateOptions菜单()函数后;弹出菜单无法显示,只留下堆芯流图标 有什么解决办法吗 在我的ActMain中执行此操作(非常片段的主要活动) @覆盖 公共布尔值OnPrepareOptions菜单(菜单){ //如果导航抽屉打开,则隐藏与内容视图相关的操作项 boolean-DrawerLayout=mDrawerLayout.isDrawerOpen(mDrawerList); hideMenuItems(菜单,!抽屉); 返

我正在处理库和抽屉菜单的兼容性

调用SupportInvalidateOptions菜单()函数后;弹出菜单无法显示,只留下堆芯流图标

有什么解决办法吗

在我的ActMain中执行此操作(非常片段的主要活动)

@覆盖
公共布尔值OnPrepareOptions菜单(菜单){
//如果导航抽屉打开,则隐藏与内容视图相关的操作项
boolean-DrawerLayout=mDrawerLayout.isDrawerOpen(mDrawerList);
hideMenuItems(菜单,!抽屉);
返回super.onPrepareOptions菜单(菜单);
}
私有void隐藏项(菜单菜单,布尔可见)
{
对于(int i=0;i
注意:只有一个带有子菜单的菜单项。在此子菜单中,所有 项目是可见的,但当我单击要在中显示的项目时 ActionBar与其他项目一样,它们只显示一个 时间这只发生在Android的2.3版本中。在上层作品中 嗯


supportInvalidateOptionsMenu
仅对
android 2.3及更低版本的
有效,这就是为什么它上面有一个前缀
support
,如果您在
android 2.3及更高版本的
中尝试运行
onPrepareOptionsMenu
时使用该
onPrepareOptionsMenu
而不是调用它,则更有可能

解决方案:

您可以先检查设备是否为
2.3及以下版本
以上版本
,如果设备为以上版本,则使用
invalidateOptions菜单()
更新/调用
OnPrepareOptions菜单
我执行了以下操作:


在onOptionsItemSelected方法中,我检查SDK的版本,如果是,我会检查,问题是调用invalidate子菜单不再出现,你知道吗?这只是主菜单,如果我点击查看更多选项,这些选项不会出现。似乎是库中的一个bug,所以谷歌搜索。@CíceroMoura你确定
DrawerLayout
是真的吗???@CíceroMoura确保在关闭和打开
mDrawerLayout
  @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        // If the nav drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        hideMenuItems(menu, !drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    private void hideMenuItems(Menu menu, boolean visible)
    {

        for(int i = 0; i < menu.size(); i++) {

            menu.getItem(i).setVisible(visible);
        }
    }
 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

        menu.clear();

        if(Build.VERSION.SDK_INT <= 10)
            inflater.inflate(R.menu.gingerbread_core_flow, menu);
        else 
            inflater.inflate(R.menu.finances, menu);


        super.onCreateOptionsMenu(menu, inflater);
    }


@Override
    public boolean onOptionsItemSelected(final MenuItem item) {

        if(Build.VERSION.SDK_INT <= 10)
        {
            android.support.v7.widget.PopupMenu popupMenu = new android.support.v7.widget.PopupMenu(getActivity(),txtMonth);
            popupMenu.inflate(R.menu.finances_gingerbread_items);
            popupMenu.getMenu().findItem(R.id.search).setVisible(false);
            popupMenu.getMenu().findItem(R.id.ordernar_por).setVisible(false);
            popupMenu.setOnMenuItemClickListener(new                 android.support.v7.widget.PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem menuItem)
                {
                    onItemSelected(menuItem);

                    return false;
                }
            });

            popupMenu.show();
        }
        else
            return onItemSelected(item);

            return super.onOptionsItemSelected(item);
        }