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?

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.