2012-04-10 24 views
5

私のアプリケーションでwebviewを使用しています。 Webviewはアプリケーションコンテキストを使用して作成されます。アプリケーションは、私はこの質問はすでに何度も頼まれていることも承知していますいずれかの選択ボックスwebviewで選択ボックスをクリックするとアプリケーションがクラッシュする

04-10 14:19:14.502: E/AndroidRuntime(12628): Uncaught handler: thread main exiting due to uncaught exception 
04-10 14:19:14.542: E/AndroidRuntime(12628): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.ViewRoot.setView(ViewRoot.java:476) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.app.Dialog.show(Dialog.java:239) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.webkit.WebView$InvokeListBox.run(WebView.java:9509) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Handler.handleCallback(Handler.java:609) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.os.Looper.loop(Looper.java:123) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at android.app.ActivityThread.main(ActivityThread.java:4595) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at java.lang.reflect.Method.invokeNative(Native Method) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at java.lang.reflect.Method.invoke(Method.java:521) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-10 14:19:14.542: E/AndroidRuntime(12628): at dalvik.system.NativeStart.main(Native Method) 

をクリックする上でクラッシュが、私は、任意の実用的なソリューションを見つけることがまだいます。 この問題は、アクティビティコンテキストを使用すると解決されますが、他の懸案事項のためにアプリケーションコンテキストを使用する必要があります。他のアラートやダイアログでは、webchromeclientのonJsAlert()をオーバーライドして処理しましたが、Webビューでこれを傍受して自分のセレクタダイアログを作成する方法を見つけることができません。

どのような提案/助けも大歓迎です。私はあなたがこのような場合にextends Activityを使用したいと思い、私のWebView実装

class MyWebView extends WebView 
{ 

MyWebView(Context context) 
{ 

    super(context.getApplicationContext()); 
    setWebChromeClient(myWebChromeClient); 
    setWebViewClient(myWebViewClient); 
} 
} 
+0

あなたは何を拡張したのですか?アクティビティかWebViewですか? – Bhavin

+0

そのwebview。アプリケーションのコンテキストを使用して実行時にwebviewを作成しています(私はそのレイアウトを使用していません)。 – androgeek

+0

このような状況を認識している場合は、アプリケーションではなくActivityのコンテキストを使用する必要があります。アクティビティーであるべきUIコンテキストなしでいくつかのUIのものを行う。 –

答えて

0

のダミーサンプルを追加

hereから参照してください。

これに加えてwebViewを使いたいのであれば、私はそれに続くコードを書いています。

mWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
       String description, String failingUrl) { 
      // Handle the error 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    }); 
+0

ご支援いただきありがとうございますが、問題はさまざまなアプリケーションアクティビティで使用できるライブラリのWebビューを作成していることですので、これはどのような場合でも従わなければならないアプローチです – androgeek

3

これは、WebViewの作成時にアクティビティコンテキストではなく、アプリケーションコンテキストを渡すためです。 WebViewからAndroidに選択ボックスを表示するには、WebViewはそのコンストラクタに与えられたコンテキストを使用し、ネイティブの単一選択セレクタを開きます。このセレクタダイアログを表示するには、アプリケーションのコンテキストではなくアクティビティコンテキストが必要です。

super(context); 
また、あなたは、あなたがそれを作成し、そこから活動中のWebビューを使用していることを確認する必要があり

は(何の意味がそれを使用してありません

:この行で

super(context.getApplicationContext()); 

:行を変更 別のアクティビティで)。別のアクティビティでWebビューが必要な場合は、指定されたアクティビティのコンテキストを使用してWebビューを作成します。

関連する問題