Je veux modifier l'icône de l'élément de menu de manière dynamique lorsque je reçois une notification d'un serveur. Cependant, je reçois un Les codes que j'ai utilisés pour modifier l'icône de l'élément de menu sont définis dans le et dans la méthode code> updateCount code>, je modifie l'icône comme suit: p> Voici mon fichier "Notification" My Menuitem: P> nullpointerexception code> lorsque les codes permettent de modifier l'icône de l'élément de menu.
OncreateOptionsMenu code> Méthode comme suit: p>
01-20 15:03:29.811: E/AndroidRuntime(10318): java.lang.NullPointerException
01-20 15:03:29.811: E/AndroidRuntime(10318): at com.xsinfosol.helpdesk_customer.TAB_Activity$3.run(TAB_Activity.java:294)
01-20 15:03:29.811: E/AndroidRuntime(10318): at android.os.Handler.handleCallback(Handler.java:730)
01-20 15:03:29.811: E/AndroidRuntime(10318): at android.os.Handler.dispatchMessage(Handler.java:92)
01-20 15:03:29.811: E/AndroidRuntime(10318): at android.os.Looper.loop(Looper.java:137)
01-20 15:03:29.811: E/AndroidRuntime(10318): at android.os.HandlerThread.run(HandlerThread.java:61)
01-20 15:04:04.881: I/System.out(11629)
4 Réponses :
ressemble à menu.getem (index) code> renvoie null car le menu n'a pas été gonflé (vous avez vérifier
mdrawerlayout! = null && isdraweropen () code>) ou vous aurez peut-être pu
index code> qui n'existe pas. Au lieu de s'appuyer sur l'index de l'élément de menu, vous pouvez utiliser l'ID de ressource, vérifiez également NULL:
public void changeIcon(){
runOnUiThread(new Runnable() {
@Override
public void run() {
if (menu != null) {
MenuItem item = menu.findItem(R.id.test_menu_item);
if (item != null) {
item.setIcon(android.R.drawable.ic_menu_edit);
}
}
}
});
}
J'ai mis en œuvre votre code mais cela ne change pas l'icône. Monsieur, dites-moi comment changer d'icône.
Assurez-vous que l'article.Seticon () est appelé. Si ce n'est pas le cas, vérifiez pourquoi.
Le menu renvoie null
Menuinflater.inflate () est-il appelé et vous passez à une ressource correcte?
Mettez à jour votre message initial avec code mis à jour et joignez également la ressource de menu.
Je vois maintenant que dans le code posté dans OncreateOptionsMenu (), vous avez une erreur de compilation car le drapeau booléen est uniquement rétabli en cas de déclaration. Vous voulez probablement retourner vrai au lieu d'appeler super ici aussi.
Voulez-vous s'il vous plaît élaborer?
Pour tester, essayez avec ceci: public booléen oncreeeoptionsMenu (menu Menu) {this.menu = menu; getmenuinflater (). Gonflez (R.Menu.notification, menu); retourne vrai; }
@ ANKUR-ARORA Peut-être que vous appelez un endroit à InvalidateOptionsMenu () Code>. Il pourrait être de restaurer l'icône à sa valeur par défaut
J'ai eu le même problème. Veuillez vous assurer que vous avez les éléments suivants dans votre élément de menu (une icône et une définition d'une icône et d'une image d'affichage pour toujours):
J'ai aussi eu le même problème et @Dario répond fonctionne comme un charme tant que vous n'appelez pas Pour résoudre ce problème, j'ignifie la ressource dessinable à une variable et un appel InvalidateOptionsMenu () CODE>
invalidateOptionsMenu () code> où je veux changer l'icône et je définirai l'icône dans
oncreateOptionsMenu () code>. Le code devrait être comme celui-ci: p>
Excellente solution mon ami! +1
1+ super classique!
Il y a 3 étapes:
Menuitem global code> variable. LI>
- dans
OncreateOptionsMenu code> Méthode Attribuez votre valeur (la cible
menu) à elle. li>
-
Modifiez l'icône lorsque vous avez besoin. P>
XXX PRE> LI>
ol> p>