2013-03-02 4 views
18

C'est l'avertissement que je reçois:Avertissement en cas d'annulation ActionBar Débordement sur Android Menu 4.1.x

03-02 14:38:43.980: W/InputEventReceiver(3961): Attempted to finish an input event but the input event receiver has already been disposed.

Le menu que j'ai été généré à partir d'un fichier res/menu/activity_menu.xml régulier. Je gère les événements exactement comme décrit en détail sur http://developer.android.com/guide/topics/ui/menus.html#options-menu

Lorsque je clique sur les trois points verticaux pour ouvrir le menu de débordement et annuler, je reçois cet avertissement. Il semble y avoir peu de connaissances sur la façon d'attraper son déclencheur. Des idées?

+0

C'est un avertissement, et ce n'est pas une partie de votre application. On dirait un problème dans Android lui-même. Vous devriez pouvoir l'ignorer en toute sécurité –

+0

utilisez-vous ActionBar Sherlock? –

+0

@JustinV. J'utilise Android stock pour cela. – alexismorin

Répondre

14

Ceci n'a aucun lien avec votre travail.

Le menu de débordement est implémenté par PopupWindow. Lorsque l'utilisateur touche pour fermer PopupWindow, événement ACTION_DOWN mis en file d'attente dans la file d'attente de messages de l'application. Ensuite, il est fourni à View via la classe ViewPostImeInputStage et ViewPostImeInputStage envoie finalement cet événement d'entrée à l'écouteur onTouchEvent de PopupWindow.

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     final int x = (int) event.getX(); 
     final int y = (int) event.getY(); 

     if ((event.getAction() == MotionEvent.ACTION_DOWN) 
       && ((x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight()))) { 
      dismiss(); 
      return true; 
     } else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { 
      dismiss(); 
      return true; 
     } else { 
      return super.onTouchEvent(event); 
     } 
    } 

dissmiss() essayer de fermer popupWindow et popupWindow :: onDetachedWindow appellent WindowInputEventReceiver :: disposer() en premier.

Et puis ViewPostImeInputStage appelez WindowInputEventReceiver :: finishInputEvent pour terminer cet événement ACTION_DOWN. Cependant, l'instance de WindowInputEventReceiver est déjà éliminée et envoie des messages d'avertissement.

Vous pouvez le déboguer par point d'arrêt. ouvrir InputEventReceiver.java (besoin du code source android sur framework/base /) et définir le point d'arrêt à la méthode dispose.

+0

Merci pour le partage! Mais comment se débarrasser de cet avertissement? Je ne comprends pas très bien le problème principal? Dans Marshmallow, une fois que le PopupMenu est fermé, le clavier est automatiquement masqué et perd le menu et le clavier, car j'ai créé un IME personnalisé avec PopupMenu. Peux-tu aider s'il te plait? – Mohammad

Questions connexes