0

我正在使用库并与抽屉菜单兼容。

调用supportInvalidateOptionsMenu()函数后;弹出菜单未能出现,只留下核心流程图标。

有什么解决办法吗?

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

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

注意:只有一个菜单项带有子菜单。在这个子菜单中,所有项目都是可见的,但是当我单击要出现在 ActionBar 中的项目时,其他项目只会出现一次。这仅发生在 Android 2.3 版本中。在上部工作得很好。

4

2 回答 2

1

supportInvalidateOptionsMenu唯一有效的就是android 2.3 and lower为什么它上面有一个前缀,如果你在尝试运行它时使用它,则support更有可能。onPrepareOptionsMenuandroid 2.3 and above

解决方案:

您可以先检查设备是2.3 and lower还是above,如果它invalidateOptionsMenu()用于更新/调用onPrepareOptionsMenu

于 2014-08-23T00:23:58.990 回答
0

我做了以下事情:

在 onOptionsItemSelected 方法中,我检查 SDK 的版本,如果 <11,则使用 v7 创建支持 PopUpMenu,如果没有,则让正常单击选项。

最后,看起来像这样:

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

在 onItemSelected 我验证方法单击了哪个选项。

这解决了我的问题。

txtMonth 视图位于顶部,因此对用户来说没有区别。

我知道这不是最好的解决方案,但我需要快速解决它。

于 2014-08-23T00:50:44.287 回答