Domanda

Ho un AsyncTask in cui mostro un ProgressDialog nel OnPreExecute, e nascondere di nuovo in OnPostExecute, qualcosa come

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

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

La finestra di dialogo è annullabile e infatti se ne va quando si preme il pulsante Annulla durante l'esecuzione del AsyncTask.

Quando questo accade, vorrei eseguire del codice per annullare l'AsyncTask così (in questo momento, anche pensato che ProgressDialog va via, l'AsyncTask continua a funzionare e, infine, completa). 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.

Tutte le idee? Ho solo bisogno di un meccanismo per l'utente di cancellare un AsyncTask esecuzione mentre un ProgressDialog sta mostrando.

È stato utile?

Soluzione

Non ho 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);
        }
};

Altri suggerimenti

Penso che si sta cercando questo: onCancelled ()

http://developer.android.com/reference/android/os/ AsyncTask.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top