Отменить асинктюз, когда пользователь нажимает кнопку назад

StackOverflow https://stackoverflow.com/questions/4072117

Вопрос

У меня есть асинктюда, в которой я показываю прогресс-кадр в OnePreexecute, и снова скрываю его в OnPostexecute, что-то вроде

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

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

Диалог - это отменено, и действительно уходит, когда я нажимаю кнопку «Отмена» во время выполнения ASYNCASK.

Когда это произойдет, я хотел бы запустить какой-то код, чтобы отменить асинктюду (прямо сейчас, даже подумал, что он прогресс идет, асинктяка продолжает работать и в конечном итоге завершиться). Я пытался выводить свой собственный класс от ProgressDialog, а затем сделать

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

(или что-то подобное с накэллелсер), но это просто никогда не вызывается.

Есть идеи? Мне просто нужен некоторый механизм для пользователя, чтобы отменить работу Asynctask, пока отображается программа ProgressDialog.

Это было полезно?

Решение

Я не проверил это, но попробую что-то вроде этого:

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

Другие советы

Я думаю, что вы ищете это: OnCancelled ()

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top