OnPageStart se llama muchas veces y onPageFinished no se llama para una sola página
Mi pregunta es diferente de esto chicos .. I wany mi diálogo de progreso de inicio cuando la carga de la página comienza y termina cuando la carga de la página terminó en mi webview. Mi problema es el diálogo del progreso comienza y nunca consigue dismissed. He fijado puntos de rotura que demuestra que el diálogo del progreso comienza y consigue despedido muchas veces entonces él comienza y no consigue despedido incluso después de que la carga de la página terminó. Mi pregunta es por qué el onPageStarted se ejecutó muchas veces para una sola página de carga? Y por qué onPageFinished no llamado después de la finalización de la carga de la página?
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(); } });
Mi auto etiquetado filtrado Registro es como este para cargar una sola página:
- Cómo obtener URL de enlace en Android WebView con HitTestResult para una imagen vinculada (y no la URL de imagen) con Longclick
- URL de Soundcloud abierta en la aplicación nativa Soundcloud de WebView
- Compruebe el método onReceivedSslError () de un WebViewClient si se firma un certificado desde una CA propia auto-firmada
- Abrir PDF en un WebView
- Cómo buscar Android ViewFlipper Ejemplo con varias WebViews
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!
Cuando estoy haciendo clic en el enlace en la página ya cargado funciona bien. Aquí está Log:
10-06 10:59:25.098: DEBUG/mytag(543): Page Loading Started 10-06 10:59:30.889: DEBUG/mytag(543): Page Loading Finished!
- Deshabilitar Android WebView / WebViewClient Iniciado favicon.ico Solicitar
- ¿WebViewClient y WebChromeClient se excluyen mutuamente?
- Vista web de Android lanza navegador cuando llama a loadurl
- Habilitación de protocolos SSL específicos con Android WebViewClient
- WebViewClient que devuelve "No se pudo establecer una conexión segura." Al recrear el fragmento
- SaveState de Webview no maneja WebViewClient personalizado
- Android: cómo interceptar un formulario POST en android WebViewClient en el nivel 4 de API
- WebView loadUrl sólo funciona una vez
Compruebe si ya está abierto con .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(); } } });
Si tiene llamadas ajax en la página que se está cargando, onPageFinished () se llamará sólo cuando terminen esas llamadas. Mejor hacer esas llamadas con un window.setTimeout (). En ese caso, el hilo de la interfaz de usuario no se bloqueará en esas llamadas y onPageFinished () se llamará tan pronto como se cargue la página principal.
A veces sucede que cuando la página inicial se carga, algún script hace una redirección (porque necesitaba un ID de sesión o algo que haría que la página se volviera a cargar).
Puede comprobar si se está cargando una página diferente (o la misma con parámetros adicionales) registrando el parámetro url.
Supongo que si se realiza una nueva solicitud de carga antes de que la primera página termine de cargarse, el método OnPageFinished no se llamará para esa primera página.
Aquí hay una solución. En lugar de un diálogo de carga, utilizo otra vista web como pantalla de bienvenida, pero puedes cambiarla fácilmente.
El truco es, para ver si hay un nuevo "onpagestart" justo después de la "onpagefinished". Si este es el caso, no cierre la carga y espere a que el siguiente "onpagefinished".
myWebView.setWebViewClient(new WebViewClient() { boolean loadingFinished = true; boolean redirect = false; long last_page_start; long now; // Load the url public boolean shouldOverrideUrlLoading(WebView view, String url) { if (!loadingFinished) { redirect = true; } loadingFinished = false; view.loadUrl(url); return false; } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.i("p","pagestart"); loadingFinished = false; last_page_start = System.nanoTime(); show_splash(); } // When finish loading page public void onPageFinished(WebView view, String url) { Log.i("p","pagefinish"); if(!redirect){ loadingFinished = true; } //call remove_splash in 500 miSec if(loadingFinished && !redirect){ now = System.nanoTime(); new android.os.Handler().postDelayed( new Runnable() { public void run() { remove_splash(); } }, 500); } else{ redirect = false; } } private void show_splash() { if(myWebView.getVisibility() == View.VISIBLE) { myWebView.setVisibility(View.GONE); myWebView_splash.setVisibility(View.VISIBLE); } } //if a new "page start" was fired dont remove splash screen private void remove_splash() { if (last_page_start < now) { myWebView.setVisibility(View.VISIBLE); myWebView_splash.setVisibility(View.GONE); } } });
Cuando una página se envía en la aplicación webview: onPageStarted se disparó, pero onPageFinished no se disparó para seguir el código siguiente fijo y exactamente
ProgressDialog pd = null; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if(pd == null || !pd.isShowing()) { pd = new ProgressDialog(MainActivity.this); pd.setTitle("Please wait"); pd.setMessage("App is loading..."); pd.show(); } } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (pd != null) { pd.dismiss(); } }
- ¿Cómo enviar datos desde dispositivos móviles Android al almacén de datos de Google App Engine?
- El emulador de Android se descargó por completo – ejecutando el comando de energía de telnet bloqueando el Emulador