android webview进展:任何好的解决方案?

时间:2012-08-10 19:11:57

标签: android android-webview

我希望在加载页面时有一些繁忙的指示符。我的指标将像闪屏一样全屏。这是因为在开始加载之前,android webview将页面空白为白色,与普通浏览器不同。

可能会提出一个简单的解决方案。例如,在onPageStarted()中设置加载true,在onPageFinished()中设置false。

        @Override
        public void onPageFinished(WebView view, String url) {
              setLoading(false);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
                setLoading(true);
        }

这个问题是我加载的网站只需点击一下就会产生多个开始/结束周期。也许这是重定向或iframe。我不确定......但结果是“忙”指示灯会打开和关闭。

考虑到这一点,另一个想法是保持页数加载 - 在onPageStarted()中递增并在onPageFinished()递减。像这样的东西,

        private int loadingCount = 0;

        @Override
        public void onPageFinished(WebView view, String url) {
            loadingCount--;
            if (loadingCount == 0) {
              setLoading(false);
            }
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            if (loadingCount == 0) {
                setLoading(true);
            }
            loadingCount++;
        }

我遇到了这个问题:页面启动/页面完成不匹配。我不确定为什么,但我认为它可能需要做重定向。

任何想法? 感谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

private boolean loadingFinished = true, redirect = false;

public class myWebViewClient extends WebViewClient {

      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
     if (!loadingFinished) {
        redirect = true;
     }
     loadingFinished = false;
     view.setVisibility(View.VISIBLE);
     view.loadUrl(urlNewString);
     return true;
      }


      @Override
      public void onPageStarted(WebView view, String url, Bitmap favicon) {
     setTitle(url);
     loadingFinished = false;
     progressDialog = new ProgressDialog(FacebookWebView.this);
     progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
     progressDialog.setMessage(" Loading...");
     progressDialog.setCancelable(true);
     progressDialog.show();
      }


      @Override
      public void onPageFinished(WebView view, String url) {
     if (!redirect) {
        loadingFinished = true;
     }
     if (loadingFinished && !redirect) {
        if (progressDialog.isShowing()){
           progressDialog.dismiss();
        }
            //finish();
     } else {
        redirect = false;
     }
      }

我不太确定,但这应该可以解决您的重定向问题。在同一页面上的几个帧的情况下,可能在onPageFinished中计数直到帧数,然后解除“忙碌对话框”,应该是一个解决方案。