2

ページの読み込み中に、ある種のビジーインジケーターが必要です。私のインジケーターはスプラッシュ画面のように全画面表示になります。これは、通常のブラウザとは異なり、AndroidWebViewが読み込みを開始する前にページを白く空白にするためです。

簡単な解決策が提案されるかもしれません。たとえば、loadingをtrueにonPageStarted()設定し、falseをに設定しますonPageFinished()

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

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

これに伴う問題は、私がロードしているWebサイトが、シングルクリックで複数の開始/終了サイクルをもたらすことです。多分これはリダイレクト、または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をカウントしてから、「ビジーダイアログ」を閉じることが解決策になるはずです。

于 2012-08-21T07:51:08.303 に答える