2012-04-25 63 views
18

如何在運行時添加操作欄項目?如何在運行時添加操作欄項目

我使用的是actionBarSherlock,當事件發生時我需要添加一些按鈕(例如,從RSS獲取一些文本)。我不能依靠一個固定的XML。

回答

31

您可以在代碼中創建菜單是這樣的:

/*************************************/ 
/* Create the actionbar options menu */ 
/*************************************/ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    menu.add(0, 0, 0, "History").setIcon(R.drawable.ic_menu_recent_history) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 
    menu.add(0, 1, 0, "Settings").setIcon(R.drawable.ic_menu_manage) 
      .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    return true; 
} 

內檢查一個布爾值。

您將需要調用supportInvalidateOptionsMenu()來重新創建菜單。

+0

謝謝。非常棒! – hdoria 2012-04-26 19:09:59

7

可以維持,決定是否需要顯示您的按鈕

boolean hasRss = false; 

然後,覆蓋的方法onCreateOptionsMenu(菜單菜單),並檢查是否hasRss是真的還是假的標誌。如果爲true,則添加按鈕以執行任何操作。然後,您可以添加要始終顯示在您的正常按鈕不管你有RSS或不

@Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     if (hasRss) 
     { 
      menu.add(Menu.NONE, 0, Menu.NONE, "View RSS").setIcon(R.drawable.ic_menu_view) 
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
     } 

     menu.add(Menu.NONE, 1, Menu.NONE, "Normal button that is always there").setIcon(R.drawable.ic_menu_button) 
         .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

    } 

,你將有每當您找回您的值來設置你的hasRss值=真,並呼籲invalidateOptionsMenu();重裝行動酒吧菜單項

+0

謝謝。非常棒! – hdoria 2012-04-26 19:10:27