【问题标题】:Dismiss ProgressDialog after WebView loads url does not workWebView 加载 url 后关闭 ProgressDialog 不起作用
【发布时间】:2017-06-12 15:33:21
【问题描述】:

我创建了一个 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");

【问题讨论】:

  • 尝试使用setVisibility方法将可见性设置为GONE
  • @NoLuckPul​​ak 非常有趣的解决方法,但这是非常糟糕的设计。会导致内存泄漏。
  • 你是对的@SoroushA

标签: android url webview dialog progressdialog


【解决方案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)); 

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      它对我有用。

      【讨论】:

      • 抱歉,问题仍然存在。
      • setCancelable 用于用户交互。与dismiss无关
      • @SoroushA 我知道,其实很奇怪
      猜你喜欢
      • 2015-10-15
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多