Android AsynTask с откликом прогресса отменит
В моем приложении Android я использую AsynTask с диалоговым окном Progress (пожалуйста, подождите login in...) для входа пользователя с моей веб-страницей (функция веб-сервиса внутри AsynTask)
Я хочу отклонить диалог прогресса и отменить AsynTask, когда пользователь нажимает кнопку "Назад" на устройстве.
Я не могу найти такой пример, чтобы прервать AsynTask. Я читаю abouth cancel (boolean), но я не знаю, как звонить из UI.
Может кто-нибудь дать мне идею.
Спасибо
Ответы
Ответ 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. Слушатель отклонения может отменить задачу. Нет необходимости держать ссылку на диалог, и это единственное место, которое нам нужно для прослушивания отмены пользователем.