1

我当我尝试通过调用MenuCompat.setActionView(menuitem,null)从我的操作栏中删除操作视图时,我最终得到了一个不可见和不可点击的菜单项。该菜单项只是消失,它只显示当我调用setActionView传递布局。如果我调用invalidateOptionsMenu(),它会显示出来,但会产生一些奇怪的结果,比如当我需要时不显示进度条。Android为什么setActionView隐藏菜单项

这里是删除和添加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); 
      } 
     } 
    } 
} 
+0

是否有一个特定的原因,你想在单个菜单项上设置/取消设置动作视图,而不是做两件物品并设置其中一个或另一个的可见性? – ianhanniballake 2014-10-26 20:19:49

+0

菜单项也用作刷新按钮。点击它时应显示加载进度条。不知道我是否仍然可以用你所说的来实现这一点。 ? – 2014-10-26 20:54:34

回答

0

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

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

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

MenuItemCompat.setActionView(refreshItem, newView); 

但我们没有足够的信息,以确保: 其中optionsMenu定义?

+0

在onCreateOptionsMenu – 2014-10-26 20:52:24

+0

我的问题是。选项菜单是您的活动类的成员变量? – 2014-10-27 18:39:19

+0

这个帖子有点老了,我想试试看,但是@ElAbogato说我们需要更多的信息。你可以提供你的菜单XML文件? – Mood 2015-07-24 10:04:06

0

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

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