1

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

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

ответ

0

Я использую этот код, чтобы добавить пункты меню в 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; 
} 

Вы должны быть в состоянии добавить, если заявление там и изменить значок accordingley

+0

в форме отображается в то время как веб-сервис вызывается так уже назвали onCreateOptionsMenu(). Мне нужно иметь возможность изменять значок в любой момент жизненного цикла приложения. –

+0

А, ок. Я неправильно понял. Используете ли вы библиотеку совместимости для ActionBar? Если это так, я думаю, invalidateOptionsMenu() доступен, если вы расширяете FragmentActivity – Tony

+0

Я расширяю FragmentActivity. Когда я вызываю invalidateOptionsMenu(), я получаю NoSuchMethodError –

1

Я сделал что-то подобное в этом путь:

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

Menu myActionBarMenu; 

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

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

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

Я получаю сообщение об ошибке при использовании myActionBarMenu.findItem (R.id.logInAction) .setVisible (false); -> так как findItem возвращает MenuItem и не имеет setVisible метода! – user387184

+0

Я не уверен, что вы имеете в виду. См. Документацию по android.view.MenuItem (developer.android.com/reference/android/view/MenuItem.html#setVisible(boolean)). setVisible - это метод на android.view.MenuItem. Я использую ActionBarSherlock в своем проекте, и это метод в соответствующем MenuItem. – Spencer

Смежные вопросы