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

Android и ActionBarCompat: как изменить видимость действий во время выполнения на устройствах до ICS?

У меня есть Activity, который extends ActionBarActivity взято из образца кода ActionBarCompat, и я пытаюсь показать/скрыть пункты меню (действия) во время выполнения.

Я пробовал использовать setVisible() в MenuItem и работает для ICS, но в pre-ICS он меняет видимость элементов меню (кнопка меню нажимает), тогда как ActionBar не получает уведомление о меню изменения.

Любое решение? Спасибо заранее!

4b9b3361

Ответ 1

Я создал несколько альтернатив элементов панели действий в /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);

Ответ 2

Вот как я решил это:

В ActionBarHelperBase.java проекта actionbarcompat

...

private View addActionItemCompatFromMenuItem(final MenuItem item) {

final int itemId = item.getItemId();

....

Создатель этого класса копирует свойства объекта, но не копирует идентификатор элемента, поэтому его невозможно найти позже с идентификатором fiven.

Итак, я добавил его в этот метод:

...
actionButton.setId(itemId);
...

и в том же классе я просто использую:

@Override
public void hideMenuItemById(int id, boolean show){
    getActionBarCompat().findViewById(id).setVisibility(show? View.VISIBLE: View.GONE);
}

Надеюсь, это поможет вам.