Проблемы с изменением значков на ActionBar - PullRequest
1 голос
/ 26 марта 2012

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

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

Ответы [ 2 ]

1 голос
/ 18 апреля 2012

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

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

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>
0 голосов
/ 26 марта 2012

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

/*************************************/
/* 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 и изменить значок в соответствии с

...