Android WebView – 1st LoadData () funciona correctamente, las siguientes llamadas no actualizan la visualización

Después de la primera llamada a LoadData () el evento onLoadResource se activa como debería y la pantalla está bien. Siguiente quiero actualizar la pantalla con una nueva página, cuando uso LoadData () la segunda vez que la página no se actualiza y onLoadResource () NO FUEGO.

Entonces segunda llamada a LoadData () onlyfires onPageFinished … onPageStarted nunca se dispara!

Un trabajo alrededor era llamar .reload () después de LoadData () pero eso causa todas las clases de problemas durante la otra lógica en la actividad.

¿Por qué LoadData () no trabaja varias veces?

Estoy utilizando el HTML muy simple, y puesto que usar .reload () hace que funcione mi declaración de LoadData () no parece ser el problema.

Cualquier idea sería útil, TIA

Utilizar

webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null); 

funciona bien. loaddata no se actualiza la próxima vez que se cargan los datos.

Por alguna razón usted tiene que despejar el contenido primero. Los métodos de "carga …" no parecen estar añadiendo explícitamente su contenido, pero no funciona. Creo que solía ser WebView.clearView() pero que fue obsoleto. El documento para el método obsoleto en el sitio de Android realmente le dice que utilice WebView.loadUrl("about:blank") como un reemplazo para ese método. Asi que…

 WebView.loadUrl("about:blank"); WebView.loadData(data, mime, encoding); 

… hace el truco para mí. ¡Parece un poco sucio pero no me atrevería a desobedecer a Google! No estoy seguro de si alguien más está haciendo esto, pero sólo estoy cargando una cadena en que había leído de un "activo". Lo estoy usando para mostrar documentos de ayuda. Así que no estoy usando ninguna URL real; Sólo estoy usando el WebView como un renderizador de HTML.

Nota: Para aquellos novatos que hay (como yo hace sólo un mes) asegúrese de reemplazar "WebView" con una instancia de su variable. Estos no son métodos estáticos.

Este enfoque funcionará

 webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null); webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8"); 

Aquellos que todavía están teniendo el problema encontré una solución rápida solo uso un manejador para esto

  Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null); } }, 10) ; 

Pude hacer que el navegador se actualizara en cada actualización dándole al documento html un id diferente cada vez: vea abajo en // WEBVIEW.

 package com.example.scroll; // philip r brenan at gmail.com, www.appaapps.com import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.webkit.WebView; public class MainActivity extends Activity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(new MyWebView(this)); } class MyWebView extends WebView {MyWebView(Context Context) {super(Context); getSettings().setJavaScriptEnabled(true); addJavascriptInterface(this, "Android"); new Thread() {public void run() {for(int j = 0; j < 100; ++j) {post(new Runnable() {public void run() {loadData(content(), "text/html", "utf-8"); // Display in browser } }); try {Thread.sleep(5000);} catch(Exception e) {} } } }.start(); } int c = 0, C = 1; String content() {final StringBuilder s = new StringBuilder(); //s.append("<html id="+(C++)+"><body>"); // WEBVIEW REFRESHES CORRECTLY *************** s.append("<html><body>"); // WEBVIEW DOES NOT REFRESH ****************** s.append("<h1 id=11>1111</h1>"); s.append("<script>location.href = '#22';</script>"); for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c; s.append("<h1 id=22>2222</h1>"); for(int i = 0; i < 10; ++i) s.append("<p>"+c+c+c); ++c; Log.e("AAAAAA", "content="+s.toString()); s.append("</body></html>"); return s.toString(); } } } 

Necesitas cargarDataWithBaseURL en el hilo principal

 String urlUnique = String.format("http://%s", java.util.UUID.randomUUID().toString()); webView.loadDataWithBaseURL(urlUnique, "<html></html>", "text/html", "UTF-8", null); Thread.sleep(200); webView.loadData(htmlData, "text/html", "UTF-8"); 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.