2011-04-01 11 views
16

En mi aplicación para Android que utilizo AsynTask con el indicador de progreso (Por favor espere inicio de sesión en ...) para logining usuario con mi página web (función de servicio web dentro AsynTask)Android AsynTask con diálogo de progreso cancelar

quiero despedir Diálogo de progreso y cancelar AsynTask cuando el usuario haga clic en el botón Atrás en el dispositivo.

No encuentro ese tipo de ejemplo, por interrumpir AsynTask. Leí abouth cancel (boolean) pero no sé cómo llamar desde UI.

¿Alguien me puede dar una idea.

Gracias

Respuesta

9
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); 
    } 

Entonces todo lo que necesita es llamar handleOnBackButton() cuando el usuario presiona la espalda o en el hogar. Puedes hacerlo usando el método onKeyDown().

+0

En este caso, creo que esta es una solución mejor que la mía. Borrando mi respuesta. – dbyrne

+0

Esto no manejará una cancelación en el diálogo que puede ocurrir cuando el usuario hace clic en otro lugar en la pantalla mientras se muestra. Parece que la respuesta de sharic19 es más lógica ya que establece OnCancelListener en el diálogo mismo – bkurzius

5

Sólo tiene que fijar su ProgressDialog cancelar. Y desaparecerá cuando haga clic en el botón "Atrás". como esto:

dialog.setCancelable(true); 

Tiene que reemplazar onBackPressed para descartar el ProgressDialog, así como cancelar AsyncTask

@Override 
public void onBackPressed() { 
YourAsyncTaskObject.cancel(true); 
YourProgressDialog.dismiss(); 
return; 
} 
1

He encontrado que el evento de botón de retroceso se consume en el ProgressDialog que se 'muestra', por lo que la actividad no puede actuar sobre la cancelación. Tuve que agregar un oyente al cuadro de 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(); 
      } 
     });   

Nevermind.

Me pareció mucho más limpio utilizar la gestión de diálogo de la actividad y agregar un onDismissListener durante onCreateDialog. El oyente de despido puede cancelar la tarea. No es necesario mantener una referencia al diálogo y ese es el único lugar donde debemos escuchar la cancelación del usuario.

18
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 acabado a través del método setOnCancelListener -> onCancel.

Cuestiones relacionadas