Сбой PopupWindow при событии отправки - PullRequest
1 голос
/ 14 октября 2011

У меня проблема с виджетом по умолчанию для Android PopupWindow. Когда я касаюсь кнопки, чтобы отобразить всплывающее окно, а затем нажимаю кнопку «Назад» на телефоне, перед тем, как всплывающее окно показывается, у меня появляется принудительное закрытие, появляется следующая ошибка:



    10-14 16:51:53.389: ERROR/AndroidRuntime(3766): FATAL EXCEPTION: main
            java.lang.NullPointerException
            at android.widget.PopupWindow$PopupViewContainer.dispatchKeyEvent(PopupWindow.java:1342)
            at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2471)
            at android.view.ViewRoot.deliverKeyEvent(ViewRoot.java:2431)
            at android.view.ViewRoot.handleMessage(ViewRoot.java:1741)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:123)
            at android.app.ActivityThread.main(ActivityThread.java:4627)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:521)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
            at dalvik.system.NativeStart.main(Native Method)

Итак, после некоторых тестов, я вижу, эта ошибка воспроизводится на Android <2.3 версии (2.1, 2.2) также я копаюсь в источниках в grepcode, есть метод: </p>



        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
                if (event.getAction() == KeyEvent.ACTION_DOWN
                        && event.getRepeatCount() == 0) {
                    getKeyDispatcherState().startTracking(event, this);
                    return true;
                } else if (event.getAction() == KeyEvent.ACTION_UP
                        && getKeyDispatcherState().isTracking(event) && !event.isCanceled()) {
                    dismiss();
                    return true;
                }
                return super.dispatchKeyEvent(event);
            } else {
                return super.dispatchKeyEvent(event);
            }
        }

    ...

        public KeyEvent.DispatcherState getKeyDispatcherState() {
            return mAttachInfo != null ? mAttachInfo.mKeyDispatchState : null;
        }

и метод getKeyDispatcherState () возвращают ноль

Кто-нибудь решил эту проблему?

Ответы [ 2 ]

1 голос
/ 17 ноября 2011

Суть этой проблемы заключается в том, что вы фокусируете всплывающее окно перед его показом, поэтому диспетчер получит клавишу возврата перед вашей деятельностью, но теперь ваше всплывающее окно не отображается. Вы можете проверить, не уделяя внимания всплывающему окну, и вы поймете, что я имею в виду.

0 голосов
/ 25 ноября 2014

Я считаю, что это ошибка на Android.

Опубликовано здесь: http://hg.mozilla.org/releases/mozilla-aurora/rev/caca38771162

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...