2010-11-01 8 views
5

Ho un AsyncTask in cui mostro un ProgressDialog nel OnPreExecute schiena, e nascondere di nuovo in OnPostExecute, qualcosa comeAnnulla AsyncTask quando l'utente preme il pulsante

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

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

La finestra di dialogo è annullabile e anzi va via quando ho premere il pulsante Annulla durante l'esecuzione di AsyncTask.

In questo caso, vorrei eseguire del codice per annullare anche AsyncTask (al momento, anche se ProgressDialog non funziona, AsyncTask continua a funzionare e alla fine viene completato). Ho provato derivante mia classe da ProgressDialog e poi fare

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

(o qualcosa di simile con un OnCancelListener), ma questo semplicemente non viene mai chiamato.

Qualche idea? Ho solo bisogno di un meccanismo per l'utente per cancellare un AsyncTask in esecuzione mentre è visualizzato un ProgressDialog.

+0

un esempio per l'annullamento di un AsyncTask http : //www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

risposta

15

non ho ancora testato questo, ma provare qualcosa di simile:

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

Ho deciso di spostare l'inizializzazione di ProgressDialog nel mio costruttore, che per qualche strana ragione ha fatto il trucco. Anche il tuo metodo potrebbe funzionare, non aver provato. In ogni caso, se qualcuno sta avendo lo stesso problema: giocare con il punto in cui si inizializza la ProgressDialog. –

+0

+1 e grazie, la tua risposta mi ha aiutato –