Pergunta

Eu tenho uma assínceta em que mostro um progressoDialog no onPreexecute e oculto novamente no OnPostexecute, algo como

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

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

A caixa de diálogo é cancelável e, de fato, desaparece quando pressiono o botão Cancelar durante a execução do assíncrono.

Quando isso acontece, eu gostaria de executar algum código para cancelar o assíncrono também (agora, mesmo que pensei que o ProgressDialog desaparece, o AsyncTask continua correndo e, eventualmente, completa). Eu tentei derivar minha própria classe do progressdialog e depois fazer

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

(ou algo semelhante a um oncancellistener), mas isso simplesmente nunca é chamado.

Alguma ideia? Eu só preciso de algum mecanismo para o usuário cancelar uma asyncTask em execução enquanto um ProgressDialog está sendo exibido.

Foi útil?

Solução

Eu não testei isso, mas tente algo assim:

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

Outras dicas

Eu acho que você está procurando por isso: OnCancelled ()

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top