【问题标题】:Progress dialog not dismiss after (progress == 100) in webview在 webview 中(progress == 100)之后,进度对话框不会关闭
【发布时间】:2016-06-28 07:43:18
【问题描述】:

页面加载后progressdialog不会关闭,这是我缺少的

 final ProgressDialog progressDialog = new ProgressDialog(Webview.this );
WebView webview= (WebView) findViewById(R.id.webViewID);
    webview.setWebViewClient(new WebViewClient());

    //webview.loadData(content, "text/html", "UTF-8");
    webview.loadUrl("http://hop.betfanplus.com/10000/0/mega4");

    webview.setWebChromeClient(new WebChromeClient() {
          @Override
          public void onProgressChanged(WebView view, int progress) {
             // progressDialog.show();
             ProgressDialog
                      .show(Webview.this,
                              "ProgressDialog Title",
                                  "ProgressDialog Body");

              if (progress == 100) {
                 progressDialog.dismiss();               
                 }
          }
      });

感谢任何帮助。

【问题讨论】:

  • 您在 onProgresschange 中使用类本身而不是对象

标签: android webview progressdialog


【解决方案1】:

您仍应使用 onPageStarted 和 onPageFinished。

根据我的经验,即使网页加载失败,使用进度百分比也会达到 100,所以这是行不通的。

boolean loadingFinished = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    final ProgressDialog progressDialog = new ProgressDialog(Webview.this );
    progressDialog.setMessage("ProgressDialog Body");
    progressDialog.show();
    WebView webview= (WebView) findViewById(R.id.webViewID);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);

    webview.setWebViewClient(new WebViewClient() {

        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(getApplicationContext(), description, Toast.LENGTH_SHORT).show();
        }

        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            loadingFinished = false;
        }

        public void onPageFinished(WebView view, String url) {

            loadingFinished = true;
            progressDialog.cancel();
        }

    });
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadUrl("http://hop.betfanplus.com/10000/0/mega4");


}

【讨论】:

  • 如果可能的话,请根据我的代码告诉我解决方案,我不想使用 onPageStarted 和 onPageFinished @html tosin
  • 我们可以在聊天中讨论更多问题吗? @Html Tosin
  • 好的,你可以给我发个链接
  • 我不知道如何发送请你把聊天链接发给我@Html Tosin
【解决方案2】:

根据我的经验,是在 oncreate 方法中声明 webview,然后使用 webview 上下文声明 progressDialog,如下所示:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

webView = findViewById(R.id.web_view);
 progressDialog = new ProgressDialog(webView.getContext(), R.style.CustomAlertDialogStyle);

}

然后设置setWebCrhomeListener

webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (!progressDialog.isShowing()) {
                    progressDialog.show();
                }
                progressDialog.setProgress(progress);
           

        });
}

然后在onPageFinished()和onPageStarted()中控制Dialog的show()和dismiss()

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

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            progressDialog.show();
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多