progressbar - Android AsynTask con cuadro de diálogo de progreso cancelar
progressbar android circle (4)
En mi aplicación de Android, uso AsynTask con el diálogo de progreso (Espere el inicio de sesión en ...) para iniciar sesión en el usuario con mi página web (función de servicio web dentro de AsynTask)
Quiero descartar el diálogo de progreso y cancelar AsynTask cuando el usuario haga clic en el botón Atrás del dispositivo.
No puedo encontrar ese tipo de ejemplo, para interrumpir AsynTask. Leí sobreh cancel (booleano) pero no sé cómo llamar desde la interfaz de usuario.
¿Alguien puede darme una idea.
Gracias
Descubrí que el evento del botón Atrás se ha consumido en ProgressDialog, que es ''show''n'', por lo que la Actividad no puede actuar sobre la cancelación. Tuve que agregar un oyente al diálogo:
mProgress = ProgressDialog
.show(this, getText(R.string.progress_title),
getText(R.string.progressing), true, true,
new OnCancelListener() {
public void onCancel(DialogInterface pd) {
handleOnBackButton();
}
});
No importa.
Me pareció mucho más limpio usar la gestión de diálogos de la Actividad y agregar un onDismissListener durante onCreateDialog. El oyente de despedida puede cancelar la tarea. No es necesario mantener una referencia al cuadro de diálogo y ese es el único lugar donde debemos escuchar la cancelación del usuario.
Solo tienes que configurar tu ProgressDialog cancelable. Y desaparecerá cuando hagas clic en el botón "Atrás". Me gusta esto :
dialog.setCancelable(true);
Debe anular onBackPressed para descartar ProgressDialog y cancelar AsyncTask
@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}
public MyActivity extends Activity {
private MyAsyncTask task;
public onCreate() {
task = new MyAsyncTask(); // MyAsyncTask has a progress dialog and dismiss it
// in an overrided cancel() method
task.execute();
}
private void handleOnBackButton() {
task.cancel(true);
}
Luego, todo lo que necesita es llamar a handleOnBackButton()
cuando el usuario presiona atrás o su casa. Puedes hacerlo usando el método onKeyDown()
.
ProgressDialog progressDialog = ProgressDialog.show(ActivityName.this,
"Title",
"Message");
progressDialog.setCancelable(true);
progressDialog.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
// Do something...
}
});
El método setCancelable (verdadero) establece si el diálogo se puede cancelar con la tecla ATRÁS. Puede ejecutar códigos de terminación a través del método setOnCancelListener -> onCancel.