如何在运行时添加操作栏项

时间:2012-04-25 19:58:51

标签: android android-actionbar actionbarsherlock

如何在运行时添加操作栏项?

我正在使用actionBarSherlock,我需要在事件发生时添加一些按钮(例如,从RSS获取一些文本)。我不能依赖固定的xml。

2 个答案:

答案 0 :(得分:35)

您可以使用以下代码创建菜单:

/*************************************/
/* 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()来重新创建菜单。

答案 1 :(得分:9)

您可以维护一个标志,确定是否需要显示按钮

boolean hasRss = false;

然后,重写方法onCreateOptionsMenu(菜单菜单)并检查hasRss是true还是false。如果为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);

    }

每当您检索值并调用invalidateOptionsMenu();重新加载操作栏菜单项时,您必须设置hasRss值= true