当twitter4J页面完成时,使loadingDialog消失

时间:2011-09-27 13:43:48

标签: android

我正在使用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没有被正确调用,因为页面看起来已经装满了。

1 个答案:

答案 0 :(得分:1)

我终于找到了答案!有两个步骤需要添加。

  1. 使用最佳移动网址。如果输入要在桌面上使用的URL,则会有多个重定向。这会减慢页面加载速度,混淆webview,然后onPageStarted()和onPageFinished()都会多次运行。要查找移动网址,只需在浏览器中输入网址,让其完成重定向和加载,然后获取最终的网址,并在代码中使用该网址。

  2. 使用webview.getSettings()。setUserAgentString(“whatever”)。确切的用户代理字符串是无关紧要的;你只需要设置它,否则webview没有正确加载。感谢gid在can't open twitter url in android webview给出了回复(对不起,我没有足够的声誉来支持他在那个帖子上)。

  3. 只要我做这两件事,它就完美无缺 - 我删除了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的进度,但其他人可能。