So ändern Sie das Symbol des ActionBar-Menüelements dynamisch

8

Ich möchte das Symbol des Menüelements dynamisch ändern, wenn ich eine Benachrichtigung von einem Server erhalte. Ich erhalte jedoch NullPointerException , wenn die Codes zum Ändern des Symbols des Menüelements ausgeführt werden.

Codes, die ich zum Ändern des Symbols des Menüelements verwendet habe, sind in der Methode onCreatOptionsMenu wie folgt definiert:

%Vor%

und in der Methode updateCount ändere ich das Symbol wie folgt:

%Vor%

Hier ist meine Menüeintrag "Benachrichtigungs" -Datei.

%Vor%

Hier ist mein Logcat:

%Vor%

Bitte helfen Sie.

    
ankur arora 20.01.2015, 09:44
quelle

4 Antworten

9

Sieht so aus, als ob menu.getItem(index) null zurückgibt, weil das Menü nicht aufgebläht wurde (Sie haben mDrawerLayout != null && isDrawerOpen() check) oder Sie haben index , das nicht existiert. Anstatt sich auf den Menü-Item-Index zu verlassen, können Sie die Resource-ID verwenden und auch auf Null überprüfen:

%Vor%

Update: basierend auf Ihrem Code habe ich das Beispiel unten, das funktioniert. Sie können es als Basis oder zum Vergleichen verwenden, um herauszufinden, warum Ihr Code nicht funktioniert. Ich weiß nicht, wie @layout/action_bar_notification_icon aussieht, in Ihrem Fall könnte das ein Problem sein.

In diesem Beispiel wird ic_menu_delet e durch ic_menu_edit ersetzt, sobald Sie auf den Menüpunkt klicken.

test_menu.xml

%Vor%

Code:

%Vor%

changeIcon () simuliert Ihr updateCount ()

%Vor%     
Dario 20.01.2015 11:21
quelle
3

Ich hatte auch das gleiche Problem und @Dario antwortet funktioniert wie ein Charme, solange Sie invalidateOptionsMenu()

nicht aufrufen

Um dies zu lösen, weise ich die ziehbare Ressource einer Variablen zu und rufe invalidateOptionsMenu() auf, wo ich das Icon ändern möchte und setze das Icon in onCreateOptionsMenu() . Der Code sollte wie folgt aussehen:

%Vor%     
Zinc 10.03.2016 08:41
quelle
0

Ich hatte das gleiche Problem. Bitte stellen Sie sicher, dass Sie in Ihrem Menüpunkt (ein Icon und showAsAction immer eingestellt) Folgendes haben:

%Vor%     
Ana_Maria 09.12.2015 15:49
quelle
0

Es gibt 3 Schritte:

  1. Definieren Sie eine globale MenuItem Variable.
  2. in onCreateOptionsMenu Methode weisen Sie Ihren Wert zu (das Ziel Menü) dazu.
  3. Ändern Sie das Symbol.

    %Vor%

    Ich hoffe, es hilft.

sepehr 15.06.2017 19:16
quelle