Android WebView с ProgressDialog. Как мне его отключить?

#android #webview #progressdialog

#Android #webview #progressdialog

Вопрос:

Я перепробовал все, что знаю, как сделать, чтобы его отключить. Я хочу, чтобы он загрузил веб-страницу, а затем отключил ProgressDialog. Как это сделать?

 package com.calebfultz.package;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText;

public class Lists extends Activity {
    private WebView webView;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web);
        ProgressDialog pd = ProgressDialog.show(Lists.this, "", 
                "Loading. Please wait...", true);
        // Create reference to UI elements
        webView  = (WebView) findViewById(R.id.web_engine);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("http://cfultz.tumblr.com");


        // workaround so that the default browser doesn't take over
        webView.setWebViewClient(new MyWebViewClient()

        );

    }


    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }    
}
  

Ответ №1:

Возможно, вы захотите сделать вашу переменную ProgressDialog переменной-членом класса Lists и в вашем методе shouldOverrideUrlLoading добавить строку

 pd.dismiss();
  

Комментарии:

1. Спасибо. Я пробовал это, и, к сожалению, это просто мгновенно убивает диалоговое окно прогресса, вместо того, чтобы ждать загрузки страницы.

Ответ №2:

 public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // Show your progress dialog here

           prDialog = ProgressDialog.show(this, "", "Loading, please wait...", true);

       super.onPageStarted(view, url, favicon);

    }

public void onPageFinished(WebView view, String url) {

          //Finish your progress dialog here


        if (prDialog.isShowing() || prDialog != null) {
            prDialog.dismiss();
        }

        super.onPageFinished(view, url);

    }
  

Ответ №3:

Я думаю, вы можете переопределить функцию onPageFinished в MyWebViewClient: вы можете отклонить ProgressDialog в этой функции. Или вы можете переопределить onProgressChanged в MyWebChromeClient(расширяет WebChromeClient): когда прогресс равен 100, вы можете отключить ProgressDialog.

Ответ №4:

Пожалуйста, посмотрите этот код:

 // the init state of progress dialog
mProgress = ProgressDialog.show(this, "Loading", "Please wait for a moment...");               
// add a WebViewClient for WebView, which actually handles loading data from web
                mWebView.setWebViewClient(new WebViewClient() {
                    // load url
               public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        view.loadUrl(url);
                    return true;
                    }

                    // when finish loading page
                    public void onPageFinished(WebView view, String url) {
                        if(mProgress.isShowing()) {
                            mProgress.dismiss();
                    }
                    }
                });
  

у меня все работает нормально ……… наслаждайтесь.

Ответ №5:

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

        //start loading animation
            //loading is a ProgressBar type
        this.loading.setVisibility(0);
        view.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
               if(progress >= 100) {
                   this.loading.setVisibility(8);
               } 
            }
        });