Предупреждение при отмене меню ActionBar Overflow на Android 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.

Меню, которое я создал, было создано из обычного файла res/menu/activity_menu.xml. Я обрабатываю события точно так же, как описано в http://developer.android.com/guide/topics/ui/menus.html#options-menu

Когда я нажимаю вертикальные три точки, чтобы открыть меню переполнения и отменить его, я получаю это предупреждение. Кажется, мало известно, как поймать его спусковой крючок. Любые идеи?

Ответы

Ответ 1

Это не связано с вашей работой.

Меню переполнения реализовано PopupWindow. Когда пользователь прикасается, чтобы закрыть PopupWindow, событие ACTION_DOWN помещено в очередь для очереди сообщений. Затем он доставляется в класс ViewPostImeInputStage и, наконец, ViewPostImeInputStage отправляет это событие ввода в PopupWindow onTouchEvent.

    @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() попытаться закрыть PopupWindow и PopupWindow:: onDetachedWindow вызвать WindowInputEventReceiver:: dispose() первым.

И затем вызов ViewPostImeInputStage WindowInputEventReceiver:: finishInputEvent, чтобы завершить это событие ACTION_DOWN. Однако экземпляр WindowInputEventReceiver уже настроен, поэтому он выдает предупреждающие сообщения.

Вы можете отладить его с помощью точки останова. откройте InputEventReceiver.java(необходим исходный код android в framework/base/) и установите точку останова в методе dispose.