2012-04-10 5 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()를 재정 의하여 처리했지만 웹 뷰에서이를 가로 채고 자신의 선택자 대화 상자를 만드는 방법을 찾을 수 없습니다.

모든 종류의 제안/도움을 많이 주시면 감사하겠습니다. 난 당신이 이러한 경우에 extends Activity를 사용하고자하는

class MyWebView extends WebView 
{ 

MyWebView(Context context) 
{ 

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

연장 된 내용은 Activity 또는 WebView입니까? – Bhavin

+0

자사의 webview. 그것은 다른 activity.I에서 런타임에서 webview를 만드는 오전 (나는 그것에 대한 레이아웃을 사용하지 않고있다) 응용 프로그램 컨텍스트를 사용하여 – androgeek

+0

당신이 그런 상황을 알고 있다면, 당신은 시도하고 있기 때문에 당신이 Application보다는 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

지원해 주셔서 감사합니다.하지만 문제는 다른 응용 프로그램 활동에서 사용할 수있는 라이브러리에 대한 웹보기를 작성하는 것이므로 이것이 어떤 경우에 따라야하는 접근 방법입니다. – androgeek

3

WebView를 만들 때 활동 컨텍스트 대신 응용 프로그램 컨텍스트를 전달하기 때문입니다. WebView에서 Android에 선택 상자를 표시하기 위해 WebView는 생성자에서 지정된 컨텍스트를 사용하고 기본 단일 선택기 선택기를 엽니 다. 이 선택자 대화 상자를 표시하려면 응용 프로그램 컨텍스트가 아닌 Activity 컨텍스트가 필요합니다.

super(context); 
당신은 또한 당신이 당신이 그것을 생성되는 활동에 웹보기를 사용하여 확인해야

가 (아무 의미가 그것을 사용하여이 없다

:이 라인으로

super(context.getApplicationContext()); 

: 줄을 변경 다른 활동에). 다른 활동에서 웹보기가 필요한 경우 지정된 활동의 컨텍스트를 사용하여 웹보기를 만듭니다.

관련 문제