Проблемы с изменением значков на ActionBar

Мое приложение вызывает веб-сервис при запуске, чтобы проверить, вошел ли пользователь в систему. Если он вошел в систему, ему нужно показать значок выхода из системы. Если они не вошли в систему, необходимо показать значок входа. Если их версия приложения не поддерживает вход в систему, необходимо продолжать не показывать значок.

Как получить значок, отображаемый при возврате веб-службы? Я не могу вызвать invalidateOptionsMenu(), потому что я использую 2.3. Кроме того, если я пытаюсь добавить его в onPrepareOptionsMenu(), он отображается в меню, когда вы нажимаете кнопку меню, а не на панели действий.

2 ответа

Я сделал нечто подобное следующим образом:

В вашем меню панели действий уже есть элементы входа и выхода (я бы посоветовал поместить их в xml вместо создания в коде, чтобы можно было легко назначать элементам идентификатор). Затем просто держите ссылку на ваше меню, когда вы создаете его, чтобы вы могли изменить его позже.

Menu myActionBarMenu;

/**
 * Creates action bar items.
 */
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menuNameHere, menu);
    myActionBarMenu = menu;
}

Затем, когда вы узнаете, что пользователь вошел в систему, установите для элемента входа в систему значение false, например:

myActionBarMenu.findItem(R.id.logInAction).setVisible(false);
myActionBarMenu.findItem(R.id.logOutAction).setVisible(true);

изменить видимость в случае, если пользователь вышел из системы.

Вот как будет выглядеть ваше xml меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/logInAction"
        android:showAsAction="ifRoom"
        android:title="Log In"/>
    <item
        android:id="@+id/logOutAction"
        android:showAsAction="ifRoom"
        android:title="Log Out"/>
</menu>

Я использую этот код для добавления пунктов меню в панель действий:

/*************************************/
/* Create the actionbar options menu */
/*************************************/
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    menu.add("Settings")
            .setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_light)
            .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

    return true;
}

Вы должны быть в состоянии добавить оператор if и изменить иконку соответственно

Другие вопросы по тегам