菜单ActionBarActivity在调用supportInvalidateOptionsMenu()之后不起作用;

时间:2014-08-22 23:47:13

标签: android menu android-support-library android-actionbaractivity

我正在使用该库并与Drawer菜单兼容。

调用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版本中。在上层作品中   好。

2 个答案:

答案 0 :(得分:1)

supportInvalidateOptionsMenu仅对android 2.3 and lower有效,这就是它上面有前缀support的原因,如果您使用onPrepareOptionsMenu ,则更有可能当您尝试在android 2.3 and above中运行时调用

<强>溶液

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

答案 1 :(得分:0)

我做了以下事情:

在onOptionsItemSelected方法中,我检查SDK的版本,如果&lt; 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视图位于顶部,因此对用户而言没有任何区别。

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