2013-03-08 8 views
9

問題:Android WebView内にWebページをあらかじめ読み込んで、アクティビティの準備ができたらアクティビティに添付します。実際のアクティビティが作成される前に、Webページをロードするトリガポイントが表示されます。だから私は次の方法でサービス内にwebviewオブジェクトを作成します。このウェブ表示を表示する必要がある活動は、私はちょうどでframeLayoutを作成して、すなわち、このWebViewの子ビューを追加し、setContentViewを呼び出して作成されますContextWrapperとContextを使用してAndroid WebViewオブジェクトを作成したときの違いは何ですか?

MutableContextWrapper contextWrapper = new MutableContextWrapper(serviceContext.getApplicationContext()); 
this.webView = new WebView(contextWrapper); 

。このようにして、私のウェブビューは、ウェブページがプリロードされた状態で表示されます。私も次のようにします。

contextWrapper.setBaseContext(CurrentActivity.this); 

これは、上記で指定したのと同じContextWrapperオブジェクトです。この後も、webviewは通常のユースケースで描くことができるJavascriptアラートを描画しません。私は

ContextWrapper contextWrapper = new ContextWrapper(CurrentActivity.this); 
this.webView = new WebView(contextWrapper); 
this.webView.loadUrl(someUrl); 

を行うと

はさえWebViewのはJSアラートをポップアップ表示することができません。ログに例外タグや致命的なタグが表示されません。 WebViewは、その上にウィンドウを描画することはできません。

これは通常の方法で正常に動作し、現在のアクティビティのコンテキストで直接WebViewを作成することを意味します。私はhttp://developer.android.com/reference/android/content/ContextWrapper.htmlを知っているすべてのために

this.webView = new WebView(CurrentActivity.this); 
this.webView.loadUrl(someUrl); 

だけコンストラクタで渡されたとして、それが保持しているベースコンテキストで同じ操作を実行します。

私の使用例は、このようなものです。私はhttp://developer.android.com/reference/android/content/MutableContextWrapper.htmlが渡されたWebViewオブジェクトを作成します。 MutableContextWrapperは、いくつかのアクティビティのコンテキストを保持するか、または保持できるか、またはアプリケーションコンテキストを保持します。 webviewを表示する必要がある実際のアクティビティが開始されると、私はMutableContextWrapper内のコンテキストを切り替えて、フレームレイアウトとsetContentViewに入れてWebviewを表示します。基本的には、ページをロードするトリガーはアクティビティーが作成される前であるため、Webviewでページをロードしてから、アクティビティーを作成するときにアクティビティーにアタッチする必要があります。

+0

にあなたのWebView上の可視性を設定します。誰かがそれをもっと明確にしようとすることができるほど多くのupvotedされている限りは? –

+0

こんにちはボリス、質問の詳細を更新しました –

答えて

1

あなたは(serviceContextの使用に基づいて)

をメインUIスレッドオフのWebビューを作成しているようですが、Web表示は、その内部ハンドラが拘束されることに期待していますので、これは一般的に良いアイデアではありませんに見えますメインのUIスレッドに渡します。

は、これに関連する他のスレッドがあります。

A WebView in a thread can't be created

あなたは活動がロードされた後のWebViewのロードオフにはるかに優れている(すなわちonCreate方法で)と単純に「ロード」インジケーターを表示しますユーザに提供する。ページが読み込まれるまで、webviewを非表示にすることができます(setVisibility)。WebViewClientを使用して読み込みイベントを待ち受けます。

ページが読み込まれたら、私はかなりの質問を理解することはできませんVISIBLE