2010-11-01 5 views
5

J'ai un AsyncTask dans lequel je montre un ProgressDialog dans le OnPreExecute, et le cacher à nouveau dans onPostExecute, quelque chose commeAnnuler AsyncTask lorsque le bouton presse retour utilisateur

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

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

La boîte de dialogue est résiliable et même disparaît quand je appuyez sur le bouton d'annulation pendant l'exécution de la tâche asynchrone. Lorsque cela se produit, je voudrais aussi exécuter du code pour annuler le AsyncTask (en ce moment même, même si ProgressDialog s'en va, l'AsyncTask continue de fonctionner et finit par se terminer). J'ai essayé de tirer ma propre classe de ProgressDialog puis faire

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

(ou quelque chose de similaire avec un OnCancelListener), mais il suffit d 'jamais appelé.

Des idées? J'ai juste besoin d'un mécanisme pour que l'utilisateur annule une AsyncTask en cours d'exécution pendant qu'un ProgressDialog est affiché.

+0

un exemple pour l'annulation d'une AsyncTask http : //www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

Répondre

15

Je ne l'ai pas testé, mais essayer quelque chose comme ceci:

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

J'ai décidé de déplacer l'initialisation de ProgressDialog dans mon constructeur, qui pour une raison bizarre a fait l'affaire. Votre méthode pourrait aussi bien fonctionner, n'ont pas essayé. Dans tous les cas, si quelqu'un a le même problème: jouez avec le point où vous initialisez le ProgressDialog. –

+0

+1 et merci, votre réponse m'a aidé –

Questions connexes