10
votes

AppCompat V21 jette java.lang.unsupportedoperationException

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: xxx

et ceci est le contexte_menu.xml: < pré> xxx

Et c'est la stacktrace que je revenue: xxx

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.


0 commentaires

4 Réponses :


9
votes

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 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> xxx pré>

2) gonfler votre menu comme celui-ci: p>

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.context_menu, MenuUnwrapper.unwrap(menu));
    return true;
}


4 commentaires

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.



4
votes

Essayez ceci. Cela m'a fonctionné. XXX


0 commentaires

3
votes

Essayez ceci xxx


1 commentaires

Cela semble être la bonne réponse. L'exception vous indique d'utiliser une méthode statique de la classe MenuitemCompat.



0
votes
@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;
        }

0 commentaires