showasaction icon bar app android warnings android-optionsmenu

bar - ic menu icons android



Advertencia al cancelar el menú de desbordamiento de la barra de acción en Android 4.1.x (1)

Esto no está relacionado con tu trabajo.

El menú de desbordamiento es implementado por PopupWindow. Cuando el usuario toca para cerrar PopupWindow, el evento ACTION_DOWN se pone en cola en la cola de mensajes de la aplicación. Luego se entrega a la clase Ver a través de ViewPostImeInputStage y, finalmente, ViewPostImeInputStage envía este evento de entrada al oyente 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 () intenta cerrar PopupWindow y PopupWindow :: onDetachedWindow para llamar a WindowInputEventReceiver :: dispose () primero.

Y luego ViewPostImeInputStage llama a WindowInputEventReceiver :: finishInputEvent para finalizar ese evento ACTION_DOWN. Sin embargo, la instancia de WindowInputEventReceiver ya está dispuesta por lo que arroja mensajes de advertencia.

Puedes depurarlo por punto de interrupción. abra InputEventReceiver.java (necesita el código fuente de Android en framework / base /) y establezca el punto de interrupción en el método de disposición.

Esta es la advertencia que estoy recibiendo:

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

El menú que tengo se generó a partir de un archivo res/menu/activity_menu.xml regular. Estoy manejando los eventos exactamente como se detalla en http://developer.android.com/guide/topics/ui/menus.html#options-menu

Cuando hago clic en los tres puntos verticales para abrir el menú de desbordamiento y cancelarlo, aparece esa advertencia. Parece que hay poco conocimiento de cómo atrapar su gatillo. ¿Algunas ideas?