アプリケーションコンテキストを使用してバックグラウンドで Android WebView を作成しているため、表示する必要があるときにロードして準備ができています。必要に応じて addView を使用してアクティビティにアタッチします。これはほとんどの場合うまく機能しますが、HTML 選択ドロップダウンを開こうとするとクラッシュします。
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application at android.view.ViewRootImpl.setView(ViewRootImpl.java:540) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) at android.app.Dialog.show(Dialog.java:286) at com.android.org.chromium.content.browser.input.SelectPopupDialog.show(SelectPopupDialog.java:217) at com.android.org.chromium.content.browser.ContentViewCore.showSelectPopup(ContentViewCore.java:2413) at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method) at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)
これは、ApplicationContext を使用して WebView を作成したためだと思います。私の質問は: この問題を回避する方法はありますか? ダイアログを作成できるように、既存の WebView を別のアクティビティまたはウィンドウに「アタッチ」する方法はありますか? 実行時にコンテキストを変更して、リフレクションを使用してこれを一緒に「ハック」する方法はありますか?
編集: 以下で提案されているように、MutableContextWrapperを使用してテストしたところ、この問題をうまく解決しているようです!