Après avoir mis à jour mon projet pour utiliser la bibliothèque AppCompat vers la version 21.0.0, j'ai un problème avec un menu contextuel créé avec un événement modal multitchoice GridView. Le même code fonctionne bien avec AppCompat V20.
Ceci est la partie pertinente de l'activité principale: p> et ceci est le contexte_menu.xml: p> < pré> xxx pré> Et c'est la stacktrace que je revenue: p> Je suis curieux de savoir si quelqu'un a trouvé le même problème et si Il y a un moyen autour de cela. P> p>
4 Réponses :
Il existe en effet un problème sur les périphériques ICS lors de la tentative de gonfler l'élément de menu de l'action de l'action avec AppCompat V21. Il semble que les éléments de menu soient enveloppés 2 fois et une méthode d'élément emballée est appelée à la place du natif, causant cette exception.
Google doit résoudre ce problème dans une future version d'AppCompat. P>
Quoi qu'il en soit, Voici un piratage que j'ai mis en œuvre pour le faire fonctionner avec la version actuelle: p>
1) Créer une classe d'utilitaire dans le package 2) gonfler votre menu comme celui-ci: p> android.support.v7.internal.view.menu code> (en utilisant Ce paquet est obligatoire pour permettre d'accéder à des méthodes protégées par package sans utiliser de réflexion): p>
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.context_menu, MenuUnwrapper.unwrap(menu));
return true;
}
Essayé cette solution mais n'a pas fonctionné pour moi. Le problème est que MODE.GETMENUINFLER () renvoie toujours un android.support.v7.internal.view.supportmenuinflater qui gonfle les articles MenuitemWraPperics. Des idées?
Il m'a fallu un moment mais j'ai découvert ce qui se passait. J'ajoute aussi pour déballer le menu sur OnePreparactionMode. J'espère que cela aide quelqu'un. Merci.
Oui, vous devez déballer le menu dans chaque méthode où vous devez gonfler des objets. Le problème est que quelque part dans le code appcCompat, le menu est enveloppé lorsqu'il ne doit pas, et plus tard, vous récupérez ce menu invalide dans chaque rappel. Confirmez-vous que vous avez eu le problème sur un appareil 4.0.x (sandwich à la crème glacée) et non sur Jellybean ou Kitkat? Heureux cela vous a aidé!
Oui. Il semble que ce soit des ics seulement. Merci beaucoup à nouveau, je ne pense pas que je n'aurais pas trouvé cela par moi-même.
Essayez ceci. Cela m'a fonctionné.
Essayez ceci
Cela semble être la bonne réponse. L'exception vous indique d'utiliser une méthode statique de la classe MenuitemCompat.
@Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { Log.d(TAG, "onCreateActionMode"); MenuItem item = menu.findItem(R.id.menu_item_share); mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item); MenuItemCompat.setActionProvider(item, mShareActionProvider); return true; }