android webview progress:有什么好的解决方案吗?

android webview progress:有什么好的解决方案吗?,android,android-webview,Android,Android Webview,我希望在加载页面时有一个某种忙指示器。我的指示灯将全屏显示,就像启动屏幕一样。这是因为android webview在开始加载之前会将页面清空为白色,这与普通浏览器不同 可以提出一个简单的解决方案。例如,在onPageStarted()中设置loading true,在onPageFinished()中设置false 问题是,我正在加载的网站一次点击就会导致多个开始/完成周期。也许这是重定向或iFrame。我不确定。。。但结果是“忙碌”指示灯不安地忽亮忽灭 考虑到这一点,另一个想法是保持页面加载

我希望在加载页面时有一个某种忙指示器。我的指示灯将全屏显示,就像启动屏幕一样。这是因为android webview在开始加载之前会将页面清空为白色,这与普通浏览器不同

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

问题是,我正在加载的网站一次点击就会导致多个开始/完成周期。也许这是重定向或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++;
        }
我遇到了这个问题:页面开始/页面完成不匹配。我不确定确切的原因,但我认为它可能必须执行w/重定向

有什么想法吗? 谢谢。

试试这个:

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中计算到帧数,然后关闭“忙碌对话框”。请尝试以下方法:

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计算到帧数,然后关闭“忙碌对话框”,这应该是一个解决方案。

您可以在
shouldOverrideUrlLoading()
中反复将可见性设置为
可见
,但不要将其设置为其他任何设置。这是否正确?您在
shouldOverrideUrlLoading()
中反复将可见性设置为
VISIBLE
,但从未将其设置为其他任何设置。这是正确的吗?