2013-03-08 4 views
9

Problem: Ich möchte eine Webseite in einem Android WebView laden und an eine Aktivität anhängen, wenn die Aktivität bereit ist. Der Triggerpunkt für das Laden der Webseite ist, bevor die eigentliche Aktivität erstellt wird. So erstelle ich ein Webview-Objekt in einem Dienst folgendermaßen.Was ist der Unterschied, wenn ich ein Android-WebView-Objekt mit einem ContextWrapper und einem Kontext erstellen?

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

Wenn die Aktivität, die diese Webansicht zeigen muss erstellt wird ich eine framelayout nur erstellen und ein Kind Ansicht heißt dieses webview und rufen setContentView hinzuzufügen. Auf diese Weise erscheint mein Webview mit der vorinstallierten Webseite. Ich mache auch folgende

contextWrapper.setBaseContext(CurrentActivity.this); 

Dies ist das gleiche ContextWrapper-Objekt wie oben angegeben. Auch danach zeichnet das Webview keine JavaScript-Alerts, die es im normalen Anwendungsfall zeichnen kann.

Selbst wenn ich

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

Die WebView nicht in der Lage ist JS-Benachrichtigungen Pop-up. Ich sehe keine Ausnahmen oder tödliche Tags in den Protokollen. WebView kann keine Fenster darüber zeichnen.

Dies funktioniert auf die übliche Weise, dh das Erstellen eines WebView direkt mit dem Kontext der aktuellen Aktivität.

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

Für alle weiß, dass ich ein http://developer.android.com/reference/android/content/ContextWrapper.html führt nur die gleichen Operationen auf der Basis Kontext als es in den Konstruktor übergeben hält.

Mein Anwendungsfall ist so etwas. Ich erstelle ein WebView-Objekt mit einem übergebenen http://developer.android.com/reference/android/content/MutableContextWrapper.html. Der MutableContextWrapper enthält den Kontext einiger Aktivitäten, die er halten kann, oder den Anwendungskontext. Wenn die eigentliche Aktivität, die das Webview anzeigen soll, gestartet wird, wechsle ich den Kontext innerhalb des MutableContextWrapper und zeige das Webview an, indem ich es in ein Frame-Layout und setContentView setze. Grundsätzlich ist der Auslöser, um die Seite zu laden, bevor die Aktivität erstellt wird und daher möchte ich die Seite in der Webansicht laden und sie einfach an die Aktivität anhängen, wenn sie erstellt wird.

+0

ich die Frage nicht ganz verstehen kann. Solange es so stark aufgewertet ist, kann jemand versuchen, es klarer zu machen? –

+0

Hallo Boris, ich habe die Fragedetails aktualisiert –

Antwort

1

Es sieht aus wie Sie die Web-Ansicht von der Haupt UI-Thread sind die Schaffung (basierend auf der Verwendung von serviceContext)

Dies ist im Allgemeinen keine gute Idee, wie die Web-Ansicht wird ihre internen Handler erwarten gebunden zu sein zum Hauptthread der Benutzeroberfläche.

Es gibt noch andere Themen im Zusammenhang mit diesem:

A WebView in a thread can't be created

Sie sind viel besser dran, die Webansicht Laden, nachdem die Aktivität geladen wird (dh in der onCreate-Methode) und einfach einen „Laden“ -Anzeige Anzeige für den Benutzer. Sie können das Webview ausblenden (mit setVisibility), bis es die Seite geladen hat, und verwenden Sie eine WebViewClient auf das Load-Ereignis zu hören.

Sobald die Seite geladen wird eingestellt, die Sichtbarkeit auf der Webansicht zu VISIBLE

Verwandte Themen