【问题标题】:Make loadingDialog disappear when twitter4J page completes当 twitter4J 页面完成时使 loadingDialog 消失
【发布时间】:2011-09-27 13:43:47
【问题描述】:

我正在使用 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

最后两个 URL 永远不会回调到 onPageFinished。

虽然我可以编写一个丑陋的 hack,只在加载第一个 URL 时显示加载对话框,但这并不能解决问题——然后微调器在内容实际完成加载之前就消失了。

从 StackOverflow 上的阅读中,我了解到检测 WebView 何时真正完成加载可能会出现问题,并且还没有找到解决该问题的非常好的解决方案。但是,我只是希望熟悉在 Android 应用程序的 WebViews 中显示 Twitter 提要的人知道如何判断它何时完成加载。我真的很惊讶 onPageFinished 没有被正确调用,因为页面看起来已满载。

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    2. 使用 webview.getSettings().setUserAgentString("whatever")。确切的用户代理字符串无关紧要;你只需要设置它,否则 webviews 没有正确加载。感谢 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,但其他人可能会。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多