2012-08-10 51 views
2

我想要加載頁面時有某種忙碌指示符。我的指標將像全屏閃屏一樣全屏顯示。這是因爲在開始加載之前,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++; 
     } 

我遇到了這個問題:頁面開始/頁面完成不匹配。我不確定爲什麼,但我認爲它可能必須做w /重定向。

有什麼想法? 謝謝。

回答

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中計數到幀數,然後解除「忙碌的對話框」應該是一個解決方案。

+0

您在'shouldOverrideUrlLoading()'中重複設置'VISIBLE'的可見性,但從未將其設置爲任何其他值。它是否正確? – 2012-08-21 15:32:37

相關問題