J'essaie de créer une application pour Android et je suis tombé sur le problème suivant:
L'application se bloque dans un téléphone spécifique lorsque j'appuie sur le bouton Menu. Laissez-moi vous donner quelques détails d'abord. P>
Voici la mise en page du menu et la fonction OncreateOptionsMenu: P>
RES / MENU / MAIN.XML P>
10-24 09:08:02.710 4712-4712/com.scaryboxstudios.unrealestateapp E/AndroidRuntimeï¹ FATAL EXCEPTION: main java.lang.NullPointerException at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:1004) at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1712) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2125) at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3611) at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3581) at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2831) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4929) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132) at dalvik.system.NativeStart.main(Native Method)
3 Réponses :
J'ai fini par faire une solution de contournement pour cela, que les utilisateurs signalent des rapports ont fixé le problème pour eux. P>
Implémentez des sous-menus au lieu de s'appuyer sur le menu de débordement. La mise en garde à ceci est que maintenant La technique suivante provient de https://stackoverflow.com/a/18530179/57490 P>
Convertissez tous les éléments de menu Options de débordement aux sous-menus. P> LI>
remplacement OnKeyUp code> ne semble pas tirer pour la clé de menu. Le bug d'origine semble être corrigé, donc je vais probablement supprimer le contournement du sous-menu. Malheureusement, je n'ai pas vérifié le correctif sur un périphérique LG 4.1 affecté. P>
OnKeyUp code> dans vos activités, avez-vous appeler
menu.performidIdidIflow (r.id.menu_overflow, 0); code> et n'appelle pas
super .Onkeyup code> pour
KeyCode == KeyCode_Menu Code>. P> Li>
ol>
Merci pour votre conversation Talklittle. Ce que vous avez dit est vrai bien sûr, mais je n'ai pas besoin d'une solution de contournement. En fait, il est possible de remplacer la bonne chose que je pensais. Le problème principal est de trouver la racine de ce problème et une solution correcte de le réparer. Pas un moyen de l'éviter !!
Après avoir trébuché sur le même problème récemment, j'ai trouvé la racine du problème. Le problème concerne les problèmes de compatibilité entre les bibliothèques de soutien plus anciennes et les plus récentes. Il semble que j'ai utilisé des trucs amortis autour de mon code avec des choses plus récentes. P>
Je suis désolé d'être un peu abstrait, mais cette question est de 4 mois et je ne me souviens plus que ce sont exactement les lignes de code incorrectes. Si la mémoire sert à droite, le problème a menti sur des méthodes générées automatiquement à partir de Studio Android pour les activités de tiroir d'applications. J'ai utilisé le modèle de projet d'application de tiroir depuis Android Studio et j'ai choisi de supporter des API très anciennes Android afin que Android Studio a choisi la bibliothèque de support Android dépréciée. P>
Le point est que j'ai résolu le problème lorsque j'ai refacturé le code d'utiliser uniquement des techniques non amorties. p>
Si vous vous battez sur un problème similaire, je vous recommande vivement de supprimer tout ce que Android Studio (je suppose que vous utilisez Android Studio ou Eclipse) comme amorti. p>
Aussi pour attraper le bouton de menu peut utiliser Suivant:
@Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_MENU) { // TODO - Your user code /* if (event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) { // Tell the framework to start tracking this event. //getKeyDispatcherState().startTracking(event, this); return true; } else if (event.getAction() == KeyEvent.ACTION_UP) { // getKeyDispatcherState().handleUpEvent(event); if (event.isTracking() && !event.isCanceled()) { // DO BACK ACTION HERE return true; } }*/ // if you don't want use system listener // return super.dispatchKeyEvent(event); return false; } else { return super.dispatchKeyEvent(event); } }
Ouais, cela fonctionnera mais il compte comme une "solution de contournement". Comme je l'ai dit dans la réponse de Talklittle ci-dessous, j'ai trouvé de nombreuses solutions de contournement. Mais j'étais curieux pour la solution réelle et / ou la racine du problème. Merci pour votre réponse cependant!
Problème trouvé déposé contre les bibliothèques de soutien: code.google.com/p/android / Problèmes / Détails? ID = 78154
@TalkLittle remercie! Je vais garder un œil sur ça!
Même problème sur lg l9 avec 4.1.2