2

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

可能会建议一个简单的解决方案。例如,设置 loading true inonPageStarted()和设置 false in onPageFinished()

        @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++;
        }

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

有任何想法吗?

4

1 回答 1

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中计数直到帧数,然后关闭“busy dialog”,应该是一个解决办法。

于 2012-08-21T07:51:08.303 回答