Подтвердить что ты не робот

Android AsynTask с откликом прогресса отменит

В моем приложении Android я использую AsynTask с диалоговым окном Progress (пожалуйста, подождите login in...) для входа пользователя с моей веб-страницей (функция веб-сервиса внутри AsynTask)

Я хочу отклонить диалог прогресса и отменить AsynTask, когда пользователь нажимает кнопку "Назад" на устройстве.

Я не могу найти такой пример, чтобы прервать AsynTask. Я читаю abouth cancel (boolean), но я не знаю, как звонить из UI.

Может кто-нибудь дать мне идею.

Спасибо

4b9b3361

Ответ 1

public MyActivity extends Activity {


  private MyAsyncTask task;

  public onCreate() {
     task = new MyAsyncTask(); // MyAsyncTask has a progress dialog and dismiss it
     // in an overrided cancel() method 
     task.execute();
  }

  private void handleOnBackButton() {
     task.cancel(true);
  }

Тогда вам нужно позвонить handleOnBackButton(), когда пользователь нажимает кнопку "Назад" или "домой". Вы можете сделать это с помощью метода onKeyDown().

Ответ 2

    ProgressDialog progressDialog = ProgressDialog.show(ActivityName.this,
            "Title",
            "Message");
    progressDialog.setCancelable(true);
    progressDialog.setOnCancelListener(new OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {
            // TODO Auto-generated method stub
            // Do something...
        }
    });

Метод setCancelable (true) устанавливает, будет ли диалог отменен с помощью клавиши BACK. Вы можете выполнить коды завершения с помощью метода setOnCancelListener → onCancel.

Ответ 3

Вам просто нужно отключить ProgressDialog. И он исчезнет, ​​когда вы нажмете кнопку "Назад". Как это:

dialog.setCancelable(true);

Вам нужно переопределить onBackPressed, чтобы отменить ProgressDialog, а также отменить AsyncTask

@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}

Ответ 4

Я обнаружил, что событие кнопки "Назад" потребляет ProgressDialog, который является "show'n", поэтому Activity не может действовать на отмену. Мне пришлось добавить слушателя в диалог:

mProgress = ProgressDialog
        .show(this, getText(R.string.progress_title),
        getText(R.string.progressing), true, true,
        new OnCancelListener() {
            public void onCancel(DialogInterface pd) {
                handleOnBackButton();
            }
        });         

Nevermind.

Мне было гораздо проще использовать управление диалоговым окном Activity и добавить onDismissListener во время onCreateDialog. Слушатель отклонения может отменить задачу. Нет необходимости держать ссылку на диалог, и это единственное место, которое нам нужно для прослушивания отмены пользователем.