Проблемы с изменением значков на 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 и изменить иконку соответственно