2012-04-25 60 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