Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 加载webview后,如何关闭进度对话框?_Java_Android_Webview_Progressdialog_Dismiss - Fatal编程技术网

Java 加载webview后,如何关闭进度对话框?

Java 加载webview后,如何关闭进度对话框?,java,android,webview,progressdialog,dismiss,Java,Android,Webview,Progressdialog,Dismiss,加载webview后,我需要对我的代码做些什么才能使对话框关闭() public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CookieSyncManager.createInstance(this); CookieSy

加载webview后,我需要对我的代码做些什么才能使对话框
关闭()

public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            setContentView(R.layout.main); 
            CookieSyncManager.createInstance(this);
            CookieSyncManager.getInstance().startSync();
            webview = (WebView) findViewById(R.id.webview);
            webview.setWebViewClient(new homeClient());
            webview.getSettings().setJavaScriptEnabled(true);
            webview.getSettings().setPluginsEnabled(true);
            webview.loadUrl("http://google.com");

            ProgressDialog pd = ProgressDialog.show(Home.this, "", 
                    "Loading. Please wait...", true);

        }
我试过了

public void onPageFinshed(WebView view, String url){
        pd.dismiss();
    }

没有工作。

您如何在
onPageFinshed()中访问
pd
?(您确定页面加载时确实调用了它吗?)

onCreate()
中,尝试将
pd
传递给
homeClient
,以便
homeClient
可以关闭对话框

您的家庭客户端应如下所示:

private class homeClient extends WebViewClient {

    private ProgressDialog pd;

    public homeClient(ProgressDialog pd) {
        this.pd = pd;
    }

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {           
        view.loadUrl(url); 
        return true; 
    } 

    @Override
    public void onPageFinished (WebView view, String url) {
        if (pd.isShowing()) {
            pd.dismiss();
        }
    }
}
在您的
onCreate()
中:

:o setWebViewClient(新的homeClient())homeClient()

试试这个

...
...
...

webview = (WebView) findViewById(R.id.webview);
webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {              
                view.loadUrl(url);
                return true;
            }


          public void onPageFinished(WebView view, String url) {
                if (progressBar.isShowing()) {
                    progressBar.dismiss();
                }
            }
 webview.loadUrl("http://www.google.com");

}
更新:: 这是一个很好的例子

这没关系

public class WordActivity extends Activity {

    private WebView webview;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webview);
        Bundle objetbunble  = this.getIntent().getExtras(); 
        webview = (WebView) findViewById(R.id.webview);

        final Activity activity = this;

        webview.getSettings().setJavaScriptEnabled(true);

        webview.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {              
                view.loadUrl(url);
                return true;
            }
            public void onLoadResource (WebView view, String url) {
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(activity);
                    progressDialog.setMessage("Chargement en cours");
                    progressDialog.show();
                }
            }
            public void onPageFinished(WebView view, String url) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                    progressDialog = null;
                }
            }
        }); 
        webview.loadUrl("http://www.example.com");
    }


}

@Jorgesys这不是100%准确。如果一个页面中有多个iFrame,则会有多个onPageFinished(和onPageStarted)。如果你有几个重定向,它也可能失败。我认为这种方法解决了所有问题:

boolean loadingFinished = true;
boolean redirect = false;

mWebView.setWebViewClient(new WebViewClient() {

   @Override
   public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
       if (!loadingFinished) {
          redirect = true;
       }

   loadingFinished = false;
   webView.loadUrl(urlNewString);
   return true;
   }

   @Override
   public void onPageStarted(WebView view, String url) {
        loadingFinished = false;
        //SHOW LOADING IF IT ISNT ALREADY VISIBLE  
    }

   @Override
   public void onPageFinished(WebView view, String url) {
       if(!redirect){
          loadingFinished = true;
       }

       if(loadingFinished && !redirect){
         //HIDE LOADING IT HAS FINISHED
       } else{
          redirect = false; 
       }

    }
});
如果您只是想在WebView中加载网页之前显示进度。您只需请求窗口功能进度即可

setContentView(R.layout.blahblah)之前

并在onProgressChanged中显示它的进度

 final Activity context= this;
 webview.setWebChromeClient(new WebChromeClient() 
 {
   public void onProgressChanged(WebView webView, int progress) 
   {
     activity.setProgress(progress * 1000);
   }
 });
如果您想添加自己的ProgressDialog,请使用WebviewClient

webView.setWebViewClient(new WebViewClient() {
    ProgressDialog rogressDialog ;
    @Override
    public void onPageStarted(WebView view, String url, Bitmap bitmap) {
        progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this;
        super.onPageStarted(view, url, bitmap);
    }

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

webView.loadUrl(url);

上述代码将为您在webview中导航到的每个传入链接显示一个进度对话框。

是否调用onPageFinished?在ui线程中?对不起,我本来应该这样做的,我把整个类放在了我现在的方式上。如果你向上滚动,你可以看到我尝试了一个onPageFinshed,但它不起作用。也许我这样做是不对的?或者我把它放在哪里了?很好的例子,我喜欢!酷…我已经错过了几分钟的部分。嘿,塞缪尔,我已经使用了你的代码,用于首次发布的网络视图,一切正常。因此,当我第二次导航到同一个webview时,在pagefinish后progressdialog连续显示(注意:等待了10分钟,但progressdialog没有关闭),请帮助我如何执行tat。。先谢谢你。。。
 final Activity context= this;
 webview.setWebChromeClient(new WebChromeClient() 
 {
   public void onProgressChanged(WebView webView, int progress) 
   {
     activity.setProgress(progress * 1000);
   }
 });
webView.setWebViewClient(new WebViewClient() {
    ProgressDialog rogressDialog ;
    @Override
    public void onPageStarted(WebView view, String url, Bitmap bitmap) {
        progressDialog = ProgressDialog.show(context, "Loading...", "Please wait...");//where context = YourActivity.this;
        super.onPageStarted(view, url, bitmap);
    }

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

webView.loadUrl(url);
wv1.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(Entertainment.this, description, Toast.LENGTH_SHORT).show();
            }

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


            @Override
            public void onPageFinished(WebView view, String url) {
                progressDialog.dismiss();
                String webUrl = wv1.getUrl();

            }

        });

    wv1.loadUrl(url);