2017-06-12 27 views
0

我創建了一個webview,當頁面加載時,會有一個ProgressDialog。那麼,直到這一點,所有的作品。 但現在我希望ProgressDialog在加載url後關閉。 這不起作用。在WebView加載url無效後關閉ProgressDialog

我的代碼:

private WebView webViewNews; 
private ProgressDialog progressDialogWebViewNews; 

    webViewNews = (WebView) findViewById(R.id.webViewNews); 
    WebSettings webSettings = webViewNews.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webViewNews.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      progressDialogWebViewNews = new ProgressDialog(MainActivity.this); 
      progressDialogWebViewNews.setCancelable(false); 
      progressDialogWebViewNews.setTitle("Demo..."); 
      progressDialogWebViewNews.setMessage("Demo"); 
      progressDialogWebViewNews.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      progressDialogWebViewNews.dismiss(); 
      super.onPageFinished(view, url); 
     } 
    }); 
    webViewNews.loadUrl("http://www.demo.com"); 
+0

嘗試使用'setVisibility'方法沿着這條設定的知名度,'GONE' – Pulak

+0

@NoLuckPul​​ak非常有趣的解決辦法,但是這是極其惡劣的設計。會導致內存泄漏。 – SoroushA

+0

雅你說得對@SoroushA – Pulak

回答

1

當您將一個變量傳遞給匿名類時,該變量自動變爲final,從而阻止它發生更改。嘗試將進度對話框改爲內部客戶端類的成員。這也是一個更好的設計,使您的代碼更易於維護。

class MyClient extends WebViewClient() { 
     private ProgressDialog progressDialogWebViewNews; 

     public MyClient(Context c){ 
      progressDialogWebViewNews = new ProgressDialog(c); 
     } 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      progressDialogWebViewNews.setCancelable(false); 
      progressDialogWebViewNews.setTitle("Demo..."); 
      progressDialogWebViewNews.setMessage("Demo"); 
      progressDialogWebViewNews.show(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      progressDialogWebViewNews.dismiss(); 
      super.onPageFinished(view, url); 
     } 
} 

webViewNews.setWebViewClient(new MyClient(MainActivity.this)); 
-1

也許你應該創建一個簡單的WebView對象:

WebView webView = (WebView) getActivity().findViewById(R.id.webView); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.loadUrl("yourURL"); 
    final ProgressDialog progressDialog = new ProgressDialog(getActivity()); 
    progressDialog.setMessage("Loading..."); 
    progressDialog.show(); 
    progressDialog.setCancelable(false); 
    webView.setWebViewClient(new WebViewClient() 
    { 

     public void onPageFinished(WebView view, String url) 
     { 
      progressDialog.dismiss(); 
     } 
    }); 

這對我的作品。

+0

對不起,但問題仍然存在。 –

+0

'setCancelable'用於用戶交互。與'解僱'無關' – SoroushA

+0

@SoroushA我知道,其實很奇怪 – Curio

0

刪除super.onPageFinished(view, url),那麼先檢查,如果你在你的回調方法關閉它之前進步對話框顯示。

If (progressDialogWebViewNews.showing){ 
progressDialogWebViewNews.dismiss(); 
}