我有一個Activity
extends ActionBarActivity
取自ActionBarCompat
代碼示例,我試圖在運行時顯示/隱藏菜單項(動作)。Android和ActionBarCompat:如何更改ICS前設備運行時操作的可見性?
我使用的MenuItem
setVisible()
嘗試和工程ICS,但在預ICS只更改菜單項目(菜單按鈕按下),而ActionBar
可視性不會得到通知的菜單更改。
任何解決方案?提前致謝!
我有一個Activity
extends ActionBarActivity
取自ActionBarCompat
代碼示例,我試圖在運行時顯示/隱藏菜單項(動作)。Android和ActionBarCompat:如何更改ICS前設備運行時操作的可見性?
我使用的MenuItem
setVisible()
嘗試和工程ICS,但在預ICS只更改菜單項目(菜單按鈕按下),而ActionBar
可視性不會得到通知的菜單更改。
任何解決方案?提前致謝!
這是我如何解決它:
在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);
}
希望它可以幫助你。
您可以請擴展您的答案,並添加更多的細節。我嘗試過,但無法啓動。是否還有其他步驟? – 2012-05-24 16:00:00
該方法不能從活動中調用。只能從ActonBarHelper調用方法。我無法弄清楚這個代碼應該如何工作。 – tobias 2012-12-28 02:06:09
請參閱演示項目的實現https://github.com/AlienAsRoger/CourtDeadlines – 2012-12-30 23:03:46
我在/ 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);
你必須調用supportInvalidateOptionsMenu(),這是ActionBarActivity的相關方法:
我知道這並不回答你的問題,但你看過ActionBarSherlock(http://abs.io)?您絕對可以更改ICS前設備上菜單項的可見性。即使您不想切換ActionBar實現,也可以在ActionBarSherlock源代碼中找到解決方案。 – ashughes 2012-05-23 17:52:40
這是一個好主意。任何指向應該看的地方? – 2012-05-23 20:31:40