2011-01-04 22 views
20

En mi aplicación que estoy haciendo un trabajo intenso en AsyncTask progreso como lo sugiere tutoriales Android y mostrando un ProgressDialog en mi principal mi actividad:Actualización de diálogo en la Actividad de AsyncTask

dialog = ProgressDialog.show(MyActivity.this, "title", "text"); 
new MyTask().execute(request); 

donde luego en MyTask he puesto resultados de vuelta a la actividad:

class MyTask extends AsyncTask<Request, Void, Result> { 

    @Override protected Result doInBackground(Request... params) { 
     // do some intense work here and return result 
    } 

    @Override protected void onPostExecute(Result res) { 
     postResult(res); 
    } 
} 

y en consecuencia se coloque en la actividad principal que ocultar el diálogo:

protected void postResult(Result res) { 
    dialog.dismiss(); 
    // do something more here with result... 
} 

Así que todo está funcionando bien aquí, pero me gustaría de alguna manera actualizar el cuadro de diálogo de progreso para poder mostrar al usuario un progreso real en lugar de un mensaje ficticio "Por favor espere ...". ¿Puedo de alguna manera acceder al diálogo de progreso desde MyTask.doInBackground, donde todo el trabajo está hecho?

Según tengo entendido, se ejecuta como un subproceso separado, por lo que no puedo "hablar" con la actividad principal desde allí y es por eso que utilizo onPostExecute para devolverle el resultado. Pero el problema es que onPostExecute se llama solo cuando todo el trabajo ya está hecho y me gustaría actualizar el progreso del diálogo en el medio de hacer algo.

¿Algún consejo sobre cómo hacer esto?

Respuesta

40

AsyncTask tiene el método onProgressUpdate(Integer...) que puede llamar a cada iteración por ejemplo o cada vez que se realiza un progreso durante doInBackground() llamando al publishProgress().

Consulte la docs para más detalles

+0

Uh, de alguna manera se perdió en esa parte docs, gracias! – Laimoncijus

Cuestiones relacionadas