Android WebView加载url后关闭ProgressDialog无效

Android WebView加载url后关闭ProgressDialog无效,android,url,webview,dialog,progressdialog,Android,Url,Webview,Dialog,Progressdialog,我创建了一个webview,当页面加载时,会出现一个ProgressDialog。好吧,直到这一点,所有的工作。 但是现在我想在加载url后关闭ProgressDialog。 这不管用 我的代码: private WebView webViewNews; private ProgressDialog progressDialogWebViewNews; webViewNews = (WebView) findViewById(R.id.webViewNews); WebSettings

我创建了一个webview,当页面加载时,会出现一个ProgressDialog。好吧,直到这一点,所有的工作。 但是现在我想在加载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");

也许您应该创建一个简单的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();
        }
    });

它对我很有用。

当你把一个变量传递给一个匿名类时,这个变量会自动变成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)); 

删除
super.onPageFinished(视图,url)
,然后在回调方法中关闭进度对话框之前,首先检查是否显示进度对话框

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

尝试使用
setVisibility
方法将可见性设置为
GONE
@NoLuckPulak这是一个非常有趣的解决方法,但这是一个非常糟糕的设计。将导致内存泄漏。您是对的@SoroushASorry,但问题仍然存在。
setCancelable
用于用户交互。与解雇索鲁沙无关我知道,事实上这很奇怪