在Android中,为了使WebView刷新,必须加载数据两次。

18

我第一次创建这个活动时,一切都很顺利。但是,在我从菜单中选择更改一些字符串值的文本并使用webview设置后,出现了问题。

webview.loadData(result, "text/html; charset=UTF-8", null);
webview.loadData(result, "text/html; charset=UTF-8", null);

我必须要做两次,否则webview会保持不变。有人知道这是为什么吗?因为结果字符串相同,为什么webview还要强制我加载两次数据?


我遇到了完全相同的问题。你找到解决方法了吗? - Javide
不,我只是加载了两次。因为这比不显示正确的东西要好。我想可能与缓存有关。所以如果你有时间,请尝试 public void clearCache (boolean includeDiskFiles)public void clearHistory () 然后看看它是否有效。我现在没有时间测试,因为我正在忙其他事情。所以请告诉我它们是否有效。谢谢。 - Owen Zhao
我找到了影响我的情况的问题。我的 WebView 是 ViewSwitcher 的子视图。我将 WebView 嵌入 LinearLayout 中,这就是导致 WebView 第一次加载时无法显示的原因。移除 LinearLayout 解决了这个问题。 - Javide
谢谢。但在我的情况下,我没有布局。public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webview = new WebView(this); webview.getSettings().setBuiltInZoomControls(true); setContentView(webview); - Owen Zhao
4个回答

41

3
这对我很有用,实际上还救了我的一天。谢谢。你能解释一下第一个的问题是什么吗? - Szabolcs Becze
不知道。看起来像一个缺陷。 - M. Usman Khan
不起效果。我在asset文件夹里使用CSS,如下:wv.loadDataWithBaseURL(“file:///android_asset/”,sb.toString(),“text/html”,“utf-8”,null); - Plugie

1

我不知道你的问题是什么,但根据Webview文档,你可能错误地使用了loadData方法:

Webview:loadData文档

你可能应该这样调用你的webview:

webview.loadData(result, "text/html", "UTF-8");

不知道它是否能完全解决你的问题。


1
抱歉,你的答案离正确还差得很远。请用Google翻译将一些内容转换成中文或日语,然后复制这些字符到你的项目中并比较我们的代码,你会发现我的webview和谷歌翻译是一样的,而你的就有错误字符了。 - Owen Zhao
我的回答完全是错的 :D 最后一个参数是编码类型,如Base64或ASCII。很抱歉我无法帮助您解决问题 :/ - Benoit
没关系,我之前在我的代码中也犯过这个错误,就像你一样。还是非常感谢你的努力。不过,如果是你标记的话,请把答案改回0。我的声望不足以将其改回0。 - Owen Zhao

0

使用loadDataWithBaseURL确实可以刷新数据,但它会忽略CSS body的背景颜色!... 至少它无法解析“%23000000”,而这在loadData中是有效的。


0
我正在将本地HTML数据加载到我的Webview中,而这个Webview位于RecyclerView内部。当我尝试使用webview.loadData()时,它在第一次渲染时工作正常,但是当我向上或向下滚动时,每个充气的Webview都会出现问题。当我尝试第二个webview.loadDataWithBaseURL()时,它像魅力一样工作。
因此,当您加载本地HTML并引用本地打包的图像和CSS等资源时,请使用webview.loadDataWithBaseURL()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接