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" />