我正在使用Twitter4J和WebView。 onPageStarted中显示循环进度条(微调器)。此对话框隐藏在onPageFinished中。
问题是旋转器永远不会消失。将记录语句添加到onPageStarted和onPageFinished,这是我看到的(名称已更改):
loading url: http://twitter.com/xyz
finished loading url: http://twitter.com/xyz
loading url: http://mobile.twitter.com/xyz
loading url: https://mobile.twitter.com/xyz
最后两个网址永远不会回调到onPageFinished。
虽然我可以编写一个丑陋的黑客只在加载第一个URL时显示加载对话框,但这并不能解决问题 - 然后在内容实际完成加载之前,微调器就会消失。
通过阅读StackOverflow,我收集到检测WebView何时真正完成加载可能会出现问题,并且没有看到解决该问题的非常好的解决方案。但是,我只是希望熟悉在Android应用中的WebViews中显示Twitter提要的人知道如何判断它何时完成加载。我真的很惊讶onPageFinished没有被正确调用,因为页面看起来已经装满了。
答案 0 :(得分:1)
我终于找到了答案!有两个步骤需要添加。
使用最佳移动网址。如果输入要在桌面上使用的URL,则会有多个重定向。这会减慢页面加载速度,混淆webview,然后onPageStarted()和onPageFinished()都会多次运行。要查找移动网址,只需在浏览器中输入网址,让其完成重定向和加载,然后获取最终的网址,并在代码中使用该网址。
使用webview.getSettings()。setUserAgentString(“whatever”)。确切的用户代理字符串是无关紧要的;你只需要设置它,否则webview没有正确加载。感谢gid在can't open twitter url in android webview给出了回复(对不起,我没有足够的声誉来支持他在那个帖子上)。
只要我做这两件事,它就完美无缺 - 我删除了onPageFinished中的微调器,并且应用程序就像用户期望的那样。
仍有问题的人可以尝试:
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
Log.d(TAG, "progress updated to " + newProgress);
}
});
我没有太多运气可靠地指望这最终报告100的进度,但其他人可能。