代码之家  ›  专栏  ›  技术社区  ›  Zekken

ProgressDialog不会在重定向的url上关闭

  •  0
  • Zekken  · 技术社区  · 7 年前

    我已经用进度对话框创建了简单的webview,我的问题是url何时被重定向进度对话框不会关闭。例如:我是一个开放的url,比如:www.myweb。com/帐户。然后它重定向到:www.myweb。com/登录。有什么解决办法吗?

    //progress dialog
        ProgressDialog loading;
    
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            loading= new ProgressDialog(MainActivity.this, R.style.MyAlertDialogStyle);
            loading.setMessage("Sedang Memuat...");
            loading.setCancelable(false);
            loading.show();
        }
    
        @Override
        public void onPageFinished(WebView view, String url) {
                if (loading.isShowing()) {
                    loading.dismiss();
                }
            super.onPageFinished(view, url);
        }
    
    3 回复  |  直到 7 年前
        1
  •  0
  •   Mustansir    7 年前

    我不这么认为 onPageFinished 每次重定向都会被调用,这可能是由于使用了 Iframe 或者别的什么。我认为你应该重写 onProgressChanged 在里面 WebChromeClient 这样地:

    myWebView.setWebChromeClient(new WebChromeClient(){
    
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
    
               if(newProgress <100){
                prDialog.setMessage("Please wait ...");
                prDialog.show();
            }
    
              else if (newProgress ==100){
                   if(prDialog!=null && prDialog.isShowing()){
                      prDialog.dismiss();
            }
           }
        }
    
        2
  •  0
  •   Goku Farhana Naaz Ansari    7 年前
    webView.setWebViewClient(new WebViewClientClass());
     String url = "http://google.com/";
     webView.getSettings().setJavaScriptEnabled(true);
           webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
            webView.loadUrl(url);
    
    
    
    private class WebViewClientClass extends WebViewClient {
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
    
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                prDialog = new ProgressDialog(NewsActivity.this);
                prDialog.setMessage("Please wait ...");
                prDialog.show();
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                if(prDialog!=null){
                    prDialog.dismiss();
                }
            }
        }
    
        3
  •  0
  •   Muhammad Saad Rafique    7 年前
    loading.setCancelable(false);
    

    将其设置为true,如下所示:

    loading.setCancelable(true);
    

    此外,与此相反:

    if (loading.isShowing()) {
                    loading.dismiss();
                }
            super.onPageFinished(view, url);
    

    使用此选项:

    super.onPageFinished(view, url);
    if (loading!=null) {
                loading.dismiss();
            }
    

    也可以试着评论这一行:

    super.onPageFinished(view, url);
    

    另一种方法是,如果它没有被忽略,那么你可以隐藏它,在这种情况下,你必须这样做:

    之后:

    loading.show();
    

    添加以下内容:

    loading.setVisibility(View.VISIBLE);
    

    在此之后:

    loading.dismiss();
    

    添加以下内容:

    loading.setVisibility(View.INVISIBLE);