Ver la Versión Completa : ProgressDialog o parecido mientras se realiza una tarea AsyncTask
David_91
31/05/13, 11:47:52
Buenos días
Como dice en el titulo me gustaría crear un ProgressDialog o algo parecido mientras se lanza una tarea en segundo plano, intento explicarlo un poco mejor:
Lanzo un método desde la vista al pulsar un botón, este método llama a la tarea, (sería como separar un poco el código, el método llamado sería el controlador el cual llama ya a la DB), entonces durante el proceso hasta que la tarea esta de vuelva un GET me gustaría mostrar un a barra de progreso para que la gente no crea que la aplicación se ha quedado bloqueada.
Yo esto lo realice en java, pero a la tarea le añadía el escuchador PropertyChangeListener y en el método implementado iba comprobando el cambio de estado y así finalizaba la barra de progreso, pero aquí me pierdo un poco.
Un saludo y gracias
kriogeN
31/05/13, 12:13:36
1) Pones el ProgressDialog como variable global del AsyncTask.
2) Lo creas en el constructor del AsyncTask y lo pones como setCancelable a false
3) En el onPreExecute le haces el "show"
4) En el onPostExecute le haces el "dismiss"
Así lo hago yo y funciona perfectamente, pero yo lo hago con un Dialog personalizado. Pero antes lo hacía con ProgressDialog y funciona.
David_91
31/05/13, 12:44:36
El problema es que, la tarea no extiende de Activity, y no es una inerclass, entonces, como le paso el contexto para poder utilzarla?? Al intentar hacer un getActivity() me dice que no es static entonces no puedo crear el progress Dialog, no puedo ponerlo static puesto que, esa clase no la puedo tocar,... pff ando perdido
David_91
31/05/13, 13:16:27
Arreglado, he enviado el Activity de clase en clase hasta la clase del AsyncTask
kriogeN
31/05/13, 13:47:30
Si, así lo hago yo. Realmente enviando el Context es suficiente.
David_91
06/06/13, 09:09:45
Me surge un nuevo problema en esto, tengo en el método onPreExecute tengo esto
@Override
protected void onPreExecute() {
barraProgreso = new ProgressDialog(activity);
barraProgreso.setCancelable(false);
barraProgreso.setMessage("Obteniendo saldo...");
barraProgreso.show();
}
Lo cual en teoría y según he visto, debe mostrar la barra de progreso, el problema es que, al pulsar el botón que lanzaría esta tarea, se queda como bloqueado y apenas unos mili segundos antes de que aparezca un Dialog sale el progressDialog, entonces apenas se llega a ver, la idea es que mientras esté realizando la tarea se muestre le progressDialog.
Otra cosa un poco extraña que veo que, la tarea termina antes de llegar al onPostExecute, me parece un poco extraño, he trabajdo con SwingWorker en Java, pero claro, en Java le añades un escuchador de tipo propertyChange y lees el cambiod e estado, cuando el StateValue es Done, entonces ocultas la progressBar, el problema en Android es que, en teoría termina cuando recibes algo en el get().
No sé, no entiendo muy bien porque no se muestra mientras se está realizando y si cuando le queda un segundo.
Edito: Obviamente en el onPostExecute tengo el dismiss() para ocultarlo
David_91
06/06/13, 10:36:50
He hecho unos loggers:
En el onPreExecute:
Los he puesto antes del .show() y después del show()
En el doInBackground y en el onPostExecute antes y después del dismiss()
Dan true, pero la barra se ve solamente justo antes de mostrar el Intent que se lanza, la interfaz se queda como bloqueada, y lo peor es que, si ha de esperar los 10 segundos del timeout (cosa que me ayudó ayer kriogeN) se queda esos 10 minutos la interfaz congelada,.. no entiendo nada la verdad es bastante raro si en teoría dice que si está mostrándose, porque luego no la veo hasta un mili segundo antes de mostrar el Intent??
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.