Avvertenza durante l’annullamento del menu Overflow di ActionBar su Android 4.1.x

Questo è l’avvertimento che sto ricevendo:

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

Il menu che ho è stato generato da un normale file res/menu/activity_menu.xml . Sto gestendo gli eventi esattamente come dettagliato su http://developer.android.com/guide/topics/ui/menus.html#options-menu

Quando faccio clic sui tre punti verticali per aprire il menu di overflow e annullare fuori da esso, ricevo questo avviso. Sembra che ci sia poca conoscenza su come prendere il grilletto. Qualche idea?

Solutions Collecting From Web of "Avvertenza durante l’annullamento del menu Overflow di ActionBar su Android 4.1.x"

Questo non è correlato al tuo lavoro.

Il menu di overflow è implementato da PopupWindow. Quando l’utente tocca per chiudere PopupWindow, l’evento ACTION_DOWN si è accodato alla coda messaggi dell’app. Quindi viene consegnato a View attraverso la class ViewPostImeInputStage e infine ViewPostImeInputStage invia questo evento di input al listener onTouchEvent di 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 () prova a chiudere PopupWindow e PopupWindow :: onDetachedWindow richiamando prima WindowInputEventReceiver :: dispose ().

Quindi, ViewPostImeInputStage chiama WindowInputEventReceiver :: finishInputEvent per terminare l’evento ACTION_DOWN. Tuttavia, l’istanza di WindowInputEventReceiver è già eliminata, quindi invia messaggi di avviso.

Puoi eseguire il debug in base al punto di interruzione. apri InputEventReceiver.java (necessita del codice sorgente Android su framework / base /) e imposta il punto di interruzione nel metodo di smaltimento.