Подтвердить что ты не робот

Как добавить элемент панели действий во время выполнения

Как я могу добавить элемент панели действий во время выполнения?

Я использую actionBarSherlock, и мне нужно добавить некоторые кнопки при возникновении события (например, получить некоторые тексты из RSS). Я не могу полагаться на фиксированный xml.

4b9b3361

Ответ 1

Вы можете создать меню в коде следующим образом:

/*************************************/
/* 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(), чтобы воссоздать меню.

Ответ 2

Вы можете сохранить флаг, который определяет, нужно ли отображать кнопку

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);

    }

вам нужно будет установить значение hasRss = true, когда вы получите свои значения, и вызовите invalidateOptionsMenu();, чтобы перезагрузить пункты меню панели действий.