2012-03-15 65 views
12

我有一個Activityextends ActionBarActivity取自ActionBarCompat代碼示例,我試圖在運行時顯示/隱藏菜單項(動作)。Android和ActionBarCompat:如何更改ICS前設備運行時操作的可見性?

我使用的MenuItemsetVisible()嘗試和工程ICS,但在預ICS只更改菜單項目(菜單按鈕按下),而ActionBar可視性不會得到通知的菜單更改。

任何解決方案?提前致謝!

+2

我知道這並不回答你的問題,但你看過ActionBarSherlock(http://abs.io)?您絕對可以更改ICS前設備上菜單項的可見性。即使您不想切換ActionBar實現,也可以在ActionBarSherlock源代碼中找到解決方案。 – ashughes 2012-05-23 17:52:40

+0

這是一個好主意。任何指向應該看的地方? – 2012-05-23 20:31:40

回答

4

這是我如何解決它:

在actionbarcompat項目

的ActionBarHelperBase.java ...

private View addActionItemCompatFromMenuItem(final MenuItem item) { 

final int itemId = item.getItemId(); 

....

的該類副本創建者對象的屬性,但沒有複製項目的id,所以以後用fiven id找到它是不可能的。

所以我增加了它在該方法中:

... 
actionButton.setId(itemId); 
... 

,並在同一個班,我只是用:

@Override 
public void hideMenuItemById(int id, boolean show){ 
    getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE); 
} 

希望它可以幫助你。

+0

您可以請擴展您的答案,並添加更多的細節。我嘗試過,但無法啓動。是否還有其他步驟? – 2012-05-24 16:00:00

+0

該方法不能從活動中調用。只能從ActonBarHelper調用方法。我無法弄清楚這個代碼應該如何工作。 – tobias 2012-12-28 02:06:09

+0

請參閱演示項目的實現https://github.com/AlienAsRoger/CourtDeadlines – 2012-12-30 23:03:46

5

我在/ res/menu /下創建了多個操作欄項目的備選項。我保留一位成員以表明我現在正在使用哪一個。更換菜單,我呼籲:

protected void setMenuResource(int newMenuResourceId) 
{ 
    _menuResource = newMenuResourceId; 
    invalidateOptionsMenu(); 
} 

我重寫onCreateOptionsMenu()到:

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    if (_menuResource != 0) 
    { 
     getSupportMenuInflater().inflate(_menuResource, menu); 
     return true; 
    } 
    return super.onCreateOptionsMenu(menu); 
} 

現在,如果我想改變的行動項目,我呼籲:

setMenuResource(R.menu.actionbar_menu_X); 
+0

請注意'invalidateOptionsMenu()'僅適用於API 11及更高版本。 – 2012-06-03 16:55:01

+0

它由Sherlock library for API 10實現;它也被實現爲兼容庫中的getActionBarHelper()。invalidateOptionsMenu()。 – Steelight 2012-06-04 09:32:41

+1

它沒有在ActionBarHelper類中實現。你能否更詳細地解釋它? – tobias 2012-12-28 02:04:42

相關問題