2010-11-01 24 views
5

Tengo una AsyncTask en el que muestro una ProgressDialog en el OnPreExecute espalda, y se esconden de nuevo en onPostExecute, algo así comoCancelar AsyncTask cuando el usuario presiona el botón

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 presione el botón cancelar durante la ejecución de AsyncTask.

Cuando esto sucede, me gustaría ejecutar algún 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 es llamado.

¿Alguna idea? Solo necesito un mecanismo para que el usuario cancele una AsyncTask en ejecución mientras se muestra ProgressDialog.

+0

un ejemplo para la cancelación de una AsyncTask http : //www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

Respuesta

15

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); 
     } 
}; 
+0

Decidí mover la inicialización del ProgressDialog a mi constructor, lo que por algún extraño motivo fue el truco. Su método podría funcionar también, no lo ha intentado. En cualquier caso, si alguien está teniendo el mismo problema: juegue con el punto en el que inicializa el ProgressDialog. –

+0

+1 y gracias, tu respuesta me ayudó –

Cuestiones relacionadas