Android BadTokenException при использовании контейнера WebView

Поэтому я следил за сообщением об исключении утечек памяти WebView, который предлагает использовать контейнер webview, а затем программно добавлять / удалять веб-представление из контейнера в кодах операций : утечка памяти в WebView

Тем не менее, я нажимаю следующий сбой при нажатии на элемент html, который запрашивает список параметров для выбора (например, раскрывающееся меню даты / месяца)

W/dalvikvm(17767): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) W/WindowManager(129): Attempted to add window with non-application token WindowToken{4094b730 token=null}. Aborting. FATAL EXCEPTION: main android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application android.view.ViewRoot.setView(ViewRoot.java:561) android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) android.app.Dialog.show(Dialog.java:265) android.webkit.WebView$InvokeListBox.run(WebView.java:9170) android.os.Handler.handleCallback(Handler.java:587) android.os.Handler.dispatchMessage(Handler.java:92) android.os.Looper.loop(Looper.java:150) android.app.ActivityThread.main(ActivityThread.java:4263) java.lang.reflect.Method.invokeNative(Native Method) java.lang.reflect.Method.invoke(Method.java:507) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) dalvik.system.NativeStart.main(Native Method) 

В моем макете есть следующее:

 FrameLayout android:id="@+id/webview_container" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/titlebar"> /FrameLayout> 

У меня есть следующее в onCreate ():

 mWebViewContainer = (FrameLayout)findViewById(R.id.webview_container); mWebView = new WebView(getApplicationContext()); mWebViewContainer.addView(mWebView); mWebView.setWebChromeClient(new WebChromeClient()); 

Я также установил WebViewClient.

Я проверил, что mWebView.getWindowToken () возвращает ненулевое значение.

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

Редактирование: я сделал несколько экспериментов и оглядывался вокруг, но до сих пор не решил эту проблему. Все работает нормально, если я помещаю webview непосредственно в сам макет. Но я не хочу этого делать, потому что хочу иметь возможность динамически менять веб-просмотры.

Solutions Collecting From Web of "Android BadTokenException при использовании контейнера WebView"

Когда вы создаете WebView, вы в настоящее время используете контекст приложения. Вы должны использовать контекст Activity. Чтобы решить эту проблему, замените getApplicationContext() на this при создании WebView.

Проблема здесь:

  mWebView.setWebChromeClient(new WebChromeClient()); 

После того, как вы покинули мероприятие, есть вероятность, что некоторые обратные вызовы в WebChromeClient попытаются открыть диалоги, пока активность контейнера была уничтожена.
Вот одно решение, которое работает для меня, просто добавьте mWebView.destroy () в onDestroy () вашей активности

  @Override public void onDestroy() { super.onDestroy(); if (mWebView != null) mWebView.destroy(); }