Android为什么setActionView会隐藏菜单项

时间:2014-10-26 20:09:28

标签: android android-layout android-activity android-actionbar

当我尝试通过调用MenuCompat.setActionView(menuitem,null)从操作栏中删除actionview时,我最终得到了一个看不见且无法点击的菜单项。菜单项刚刚消失,只有当我调用setActionView传递布局时它才会显示。如果我调用invalidateOptionsMenu(),它会显示但产生一些奇怪的结果,比如在我需要时不显示进度条。

这是同时删除和添加actionView的功能。它是一个刷新动作:

public void refresh(boolean refreshing, boolean fragment) {
    if(refreshing == refreshed) {
        return;
    }
    refreshed = refreshing;

    final MenuItem refreshItem = optionsMenu.findItem(R.id.menu_refresh);

    if (optionsMenu != null) {
        if (refreshItem != null) {
            if (refreshing) {
                MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_indeterminate_progress);
                MenuItemCompat.expandActionView(refreshItem);
                if(fragment)
                    ((PhotoGridPagerFragment) fm.findFragmentByTag(TAG_FOR_PHOTO_GRID_PAGER_FRAGMENT)).refresh();
            } else {
                MenuItemCompat.setActionView(refreshItem, null);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

MenuItemCompat.setActionView(refreshItem,R.layout.actionbar_indeterminate_progress);

我认为你不能只发送一个布局ID。您需要先将其充气,然后将其作为参数传递:

View newView = getLayoutInflater().inflate(R.layout.actionbar_indeterminate_progress);

MenuItemCompat.setActionView(refreshItem, newView);

但我们没有足够的信息确定: optionsMenu在哪里定义?

答案 1 :(得分:0)

也许你忘了为MenuItem设置一个图标。

<item
    android:id="@+id/refreshMenuItem" android:title="@string/refresh"
    app:showAsAction="always" android:icon="@mipmap/refresh" />