Pregunta

Tengo una AsyncTask en el que muestro una ProgressDialog en el OnPreExecute, y se esconden de nuevo en onPostExecute, algo así como

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

El diálogo es revocable y de hecho desaparece cuando se presiona el botón Cancelar durante la ejecución de la AsyncTask.

Cuando esto sucede, me gustaría correr un cierto código para cancelar el AsyncTask también (en este momento, hasta pensaban que ProgressDialog desaparece, la AsyncTask sigue funcionando y, finalmente, completa). He intentado derivar mi propia clase de ProgressDialog y luego hacer

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

(o algo similar con un OnCancelListener), pero esto simplemente no se vuelve a llamar.

Algunas ideas? Sólo necesito algún mecanismo para que el usuario cancelar una AsyncTask corriendo mientras que un ProgressDialog está mostrando.

¿Fue útil?

Solución

No he probado esto, pero intentar algo como esto:

    final class UploadTask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(...);

       protected onPreExecute() {
           dialog.setOnDismissListener(this);
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            this.cancel(true);
        }
};

Otros consejos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top