У меня проблема с виджетом по умолчанию для 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 () возвращают ноль
Кто-нибудь решил эту проблему?