在第一次调用LoadData()之后,onLoadResource事件将按原样触发并且显示正常。接下来我想用新页面刷新屏幕,当我第二次使用LoadData()页面没有更新时,onLoadResource()不会发生火灾。
然后第二次调用LoadData()只能获取onPageFinished ... onPageStarted永远不会触发!
解决方法是在LoadData()之后调用.reload(),但这会在活动中的其他逻辑中导致各种问题。
为什么LoadData()不能多次工作?
我使用非常简单的HTML,因为使用.reload()使它工作我的LoadData()语句似乎不是问题。
任何想法都会有所帮助,TIA
答案 0 :(得分:30)
使用
webview.loadDataWithBaseURL("same://ur/l/tat/does/not/work", "data", "text/html", "utf-8", null);
它工作正常。下次加载数据时,loaddata
不会刷新。
答案 1 :(得分:14)
出于某种原因,您必须先清除内容。 "加载......"方法似乎并没有明确地附加其内容,但它不起作用。我认为它曾经是WebView.clearView()
但是已被弃用。 Android site上已弃用方法的文档实际上会告诉您使用WebView.loadUrl("about:blank")
替代该方法。所以......
WebView.loadUrl("about:blank");
WebView.loadData(data, mime, encoding);
......为我做了诀窍。这看起来有点脏,但我不敢违反谷歌!我不确定是否有其他人这样做,但我只是加载了一个字符串,因为我从一个"资产中读取了。"我用它来显示帮助文档。所以我没有使用任何实际的网址;我只是将WebView用作HTML渲染器。
注意:对于那些新手(就像我大约一个月前一样),请务必更换" WebView"使用变量的实例。这些不是静态方法。
答案 2 :(得分:2)
这种方法可行
webView.loadDataWithBaseURL("fake-url", "<html></html>", "text/html", "UTF-8", null);
webView.loadData(htmlBuilder.toString(), "text/html", "UTF-8");
答案 3 :(得分:2)
那些仍然遇到问题的人我找到了一个快速的解决方案,只需使用一个处理程序
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
webView.loadDataWithBaseURL("", html, "text/html", "UTF-8", null);
}
}, 10) ;
答案 4 :(得分:1)
您需要在主线程
中加载dataWithBaseURL答案 5 :(得分:-1)
通过每次为html文档提供不同的ID,我能够在每次更新时刷新浏览器:请参阅下面的// 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();
}
}
}
答案 6 :(得分:-1)
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");