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:
und in der Methode updateCount
ändere ich das Symbol wie folgt:
Hier ist meine Menüeintrag "Benachrichtigungs" -Datei.
%Vor%Hier ist mein Logcat:
%Vor%Bitte helfen Sie.
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:
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% Ich hatte auch das gleiche Problem und @Dario antwortet funktioniert wie ein Charme, solange Sie invalidateOptionsMenu()
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:
Tags und Links android android-actionbar menuitem