1

Meine Anwendung ruft beim Start einen Webdienst auf, um festzustellen, ob der Benutzer angemeldet ist. Wenn sie angemeldet sind, muss ein Abmeldesymbol angezeigt werden. Wenn sie nicht angemeldet sind, muss ein Anmeldesymbol angezeigt werden. Wenn ihre Version der Anwendung das Anmelden nicht unterstützt, muss weiterhin kein Symbol angezeigt werden.Probleme beim Ändern der Symbole in ActionBar

Wie bekomme ich das Symbol zu zeigen, wenn der Web-Service zurückkehrt? Ich kann nicht invalidateOptionsMenu() aufrufen, weil ich 2.3 verwende. Wenn ich versuche, es in onPrepareOptionsMenu() hinzuzufügen, wird es auch im Menü angezeigt, wenn Sie statt auf die ActionBar die Menütaste drücken.

Antwort

0

Ich benutze diesen Code Menüpunkte zum ActionBar hinzuzufügen:

/*************************************/ 
/* 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; 
} 

Sie sollten in der Lage sein, hinzufügen eine if-Anweisung in dort und ändern Sie das Symbol accordingley

+0

der Form angezeigt, während der Web-Service so onCreateOptionsMenu() aufgerufen wird bereits genannt worden. Ich muss in der Lage sein, das Symbol zu jedem Zeitpunkt während des Lebenszyklus der Anwendung zu ändern –

+0

Ah ok. Ich habe es falsch verstanden. Verwenden Sie die Kompatibilitätsbibliothek für die ActionBar? Wenn ja, denke ich, dass invalidateOptionsMenu() verfügbar ist, wenn Sie FragmentActivity – Tony

+0

erweitern Ich erweitern FragmentActivity. Wenn ich invalidateOptionsMenu() aufrufen, bekomme ich einen NoSuchMethodError –

1

Ich habe getan, etwas Ähnliches diese Weg:

In Ihrem Aktionsleistenmenü, haben Sie sowohl die An- und Abmeldeelemente bereits dort (ich würde empfehlen, sie in ein XML-Format zu setzen, anstatt es im Code zu erstellen, damit Sie den Elementen einfach eine ID zuweisen können). Halten Sie dann einen Verweis auf Ihr Menü, wenn Sie es erstellen, damit Sie es später ändern können.

Menu myActionBarMenu; 

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

Dann, wenn Sie der Benutzer herausfinden, angemeldet ist, stellen Sie die Sichtbarkeit des Log-in Artikel auf false wie folgt aus:

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

die Sichtbarkeit im Fall umgekehrt der Benutzer angemeldet ist aus .

Dies wäre, was Ihr xml-Menü aussehen würde:

<?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

Ich erhalte einen Fehler bei der Verwendung von myActionBarMenu.findItem (R.id.logInAction) .setVisible (false); -> seit findItem return MenuItem und das hat keine setVisible Methode! – user387184

+0

Ich bin mir nicht sicher, was du meinst. Weitere Informationen finden Sie in der Dokumentation zu android.view.MenuItem (developer.android.com/reference/android/view/MenuItem.html#setVisible(boolean)). setVisible ist eine Methode auf android.view.MenuItem. Ich verwende ActionBarSherlock in meinem Projekt, und es ist auch eine Methode im entsprechenden MenuItem. – Spencer