Android WebView - 1 ° LoadData () funziona bene, le chiamate successive non aggiornano visualizzazione
Domanda
Dopo la prima chiamata a LoadData () l'evento onLoadResource incendi come dovrebbe e il display va bene. Successivo voglio aggiornare la schermata con una nuova pagina, quando uso LoadData () la seconda volta che la pagina non si aggiorna e onLoadResource () non si attiva.
Poi seconda chiamata a LoadData () onlyfires onPageFinished ... onPageStarted mai fuochi!
Un lavoro intorno è stato quello di chiamare .reload () dopo LoadData (), ma che causa problemi di ogni genere durante l'altra logica nell'attività.
Perché non LoadData () lavoro più volte?
Sto usando estremamente semplice HTML, e dal momento che utilizzando .reload () lo fa funzionare la mia () dichiarazione LoadData non sembra essere il problema.
Tutte le idee sarebbero utili, TIA
Soluzione
Usa
webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);
funziona benissimo. loaddata
non aggiorna la prossima volta i dati sono caricati.
Altri suggerimenti
Per qualche ragione si deve cancellare il contenuto prima. Il "load ..." metodi non sembrano essere in modo esplicito aggiungendo il loro contenuto, ma non funziona. Penso che è usato per essere WebView.clearView()
, ma che è stata sconsigliata. Il doc per il metodo deprecato sul sito Android realtà ti dice di usare WebView.loadUrl("about:blank")
in sostituzione di quel metodo. Quindi ...
WebView.loadUrl("about:blank");
WebView.loadData(data, mime, encoding);
... fa il trucco per me. Sembra un po 'sporco, ma non avrebbe osato disobbedire Google! Non sono sicuro se qualcun altro sta facendo questo, ma io sono solo il caricamento di una stringa in che avevo letto da una "risorsa". Lo sto usando per visualizzare la guida documenti. Quindi non sto usando qualsiasi URL reale; Sto semplicemente utilizzando il WebView come un renderer HTML.
Nota: Per i neofiti là fuori (come me solo circa un mese fa) assicuratevi di sostituire "WebView" con un'istanza della variabile. Questi non sono metodi statici.
Tale lavoro approccio
webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");
Coloro che stanno ancora avendo il problema ho trovato una soluzione rapida basta usare un gestore per questo
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
}
}, 10) ;
È necessario loadDataWithBaseURL in thread principale
sono stato in grado di fare il refresh del browser ad ogni aggiornamento, dando il documento HTML un diverso ID ogni volta: si prega di vedere sotto al // 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();
}
}
}
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");