2011-11-21 20 views
7

Tengo una AsyncTask y quiero que la ejecución de stip cuando se presiona el botón Atrás. También quiero que la aplicación regrese a la actividad mostrada anteriormente. Parece que logré detener la tarea pero la aplicación no regresa a la actividad anterior. ¿Algunas ideas? Este es un extracto de mi códigoAndroid - Detener AsyncTask cuando se presiona el botón Atrás y volver a la Actividad anterior

private class MyTask extends AsyncTask<Void, Void, Void> implements OnDismissListener{ 
    private boolean exception= false; 

    @Override 
    protected void onPreExecute(){ 
     pd = ProgressDialog.show(
       IscrizioniActivity.this, 
       "Please wait...", 
       "Loading the data", 
       true, 
       true, 
       new DialogInterface.OnCancelListener(){ 
        public void onCancel(DialogInterface dialog) { 
         MyTask.this.cancel(true); 
        } 
       } 
     ); 
    } 

    @Override 
    protected Void doInBackground(Void... voids) { 
     //do something 
     return (null); 
    } 

    @Override 
    protected void onPostExecute(Void voids) { 
     pd.dismiss(); 
     //do something 

    } 

    public void onDismiss(DialogInterface dialog) { 

     this.cancel(true); 
    } 

} 

Saludos.

+0

esta respuesta puede ayudar -> http://stackoverflow.com/questions/7993023/stop-a-thread-downloading-images-when-activity-finish/7993176 # 7993176 – guleryuz

Respuesta

7
pd.setCancelable(true); 
    pd.setOnCancelListener(cancelListener); 
    bCancelled=false; 

pd is your progressdialog box 

y ahora utilizar cancelListner

OnCancelListener cancelListener=new OnCancelListener(){ 
    @Override 
    public void onCancel(DialogInterface arg0){ 
     bCancelled=true; 
     finish(); 
    } 
}; 
+1

En parte, funcionó. Cancelé "implements OnDismissListner" y el método OnDismiss. Y agregó finis() en onCancel. – lugeno

+0

¿qué se cancela? – Pradeep

+0

@pradeep se usa para verificar booleanos si se cancela o no –

1

Ha intentado añadir una llamada finish() en el método onDismiss():

public void onDismiss(DialogInterface dialog) { 
    this.cancel(true); 
    IscrizioniActivity.this.finish(); 
} 
+0

Probé este método pero no funcionó. – lugeno

2

En su actividad, anulan el botón trasero, detener la AsyncTask en ella, y llaman acabado para la actividad actual.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     MyTask.cancel(); 
     IscrizioniActivity.this.finish(); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 
+0

¿Qué quieres decir con MyTask.stop? No hay tal método. – lugeno

+0

Ahora el problema está en YourCurrentActivity.finish(). No puedo hacer una referencia estática al método no estático finish() del tipo Activity – lugeno

+0

Lo sé. Tuve que poner esto antes de finis(). Ahora comprobaré si funciona. – lugeno

1

Prueba con esto ...

progress_dialog.setCancelable(true); 
progress_dialog.setOnCancelListener(new OnCancelListener() { 

    @Override 
    public void onCancel(DialogInterface dialog) { 
     // TODO Auto-generated method stub 
     YourActivity.this.finish(); 
     } 
    }); 
Cuestiones relacionadas