我正在使用应用程序上下文在后台创建一个Android WebView,以便在需要显示它时加载并准备好。当需要时,我使用addView将其附加到我的Activity。这通常非常有效,但是当我尝试打开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“附加”到不同的Activity或Window,以便可以创建对话框?是否有任何方法可以使用Reflection在运行时更改上下文来“hack”这个问题?编辑:如下所建议,我尝试使用MutableContextWrapper,它似乎很好地解决了这个问题!