onPageStart调用多次,onPageFinished没有调用单页

Mah*_*ran 10 android android-webview webviewclient

我的问题与这一个人不同.我想在页面加载开始时我的进度对话框开始,在网页加载完成页面加载时结束.我的问题是进度对话框启动并永远不会dismissed.I已设置断点它表明进度对话框启动并获得驳回多次然后开始甚至后页面加载完成,不会被解雇.我的问题是为什么onPageStarted多次执行单页加载?为什么在完成页面加载后没有调用onPageFinished?

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

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(myWebView, url, favicon);
            Log.d("mytag","Page Loading Started");
            //myURLProgressDialog= ProgressDialog.show(WebviewExampleActivity.this, "Page Loading", "Wait for a moment...");
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            Log.d("mytag","Page Loading Finished!");
            super.onPageFinished(myWebView, url);
            //myURLProgressDialog.dismiss();
        }

    });
Run Code Online (Sandbox Code Playgroud)

我自我标记的过滤日志就像这样加载单页:

   10-06 10:32:49.298: DEBUG/mytag(508): Page Loading Started
   10-06 10:32:49.998: DEBUG/mytag(508): Page Loading Started
   10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Finished!
   10-06 10:32:50.048: DEBUG/mytag(508): Page Loading Started
   10-06 10:33:00.898: DEBUG/mytag(508): Page Loading Finished!
Run Code Online (Sandbox Code Playgroud)

当我点击已加载页面上的链接时,它工作正常.这是日志:

10-06 10:59:25.098: DEBUG/mytag(543): Page Loading Started
10-06 10:59:30.889: DEBUG/mytag(543): Page Loading Finished!
Run Code Online (Sandbox Code Playgroud)

cap*_*gon 6

检查它是否已打开.isShowing().

final ProgressDialog mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage("Loading...");

browser.setWebViewClient(new myViewClient(){

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

        if(!mProgressDialog.isShowing())
        {
            mProgressDialog.show();
        }

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

        if(mProgressDialog.isShowing()){
            mProgressDialog.dismiss();
        }                
    }              

});
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用(谢谢!),但仍然似乎很奇怪,每个`onPageStarted`调用似乎都没有对应于`PageFinished`调用。 (2认同)

tar*_*war 5

如果在正在加载的页面中有ajax调用,则只有在这些调用完成时才会调用onPageFinished().最好使用window.setTimeout()进行调用.在这种情况下,在这些调用中不会阻止UI线程,并且一旦主页加载就会调用onPageFinished().