带进度对话框的Android AsynTask取消
在我的android应用程序中,我使用带有进度对话框的AsynTask(请等待登录…)让用户使用我的网页登录(AsynTask中的web服务功能) 当用户单击设备上的“后退”按钮时,我想关闭“进度”对话框并取消AsynTask 我找不到那种打断AsynTask的例子。我读过cancel(布尔值),但我不知道如何从UI调用 谁能给我一个主意吗带进度对话框的Android AsynTask取消,android,android-asynctask,progressdialog,Android,Android Asynctask,Progressdialog,在我的android应用程序中,我使用带有进度对话框的AsynTask(请等待登录…)让用户使用我的网页登录(AsynTask中的web服务功能) 当用户单击设备上的“后退”按钮时,我想关闭“进度”对话框并取消AsynTask 我找不到那种打断AsynTask的例子。我读过cancel(布尔值),但我不知道如何从UI调用 谁能给我一个主意吗 谢谢您只需将ProgressDialog设置为可取消即可。当你点击“后退”按钮时,它就会消失。 像这样: dialog.setCancelable(true
谢谢您只需将ProgressDialog设置为可取消即可。当你点击“后退”按钮时,它就会消失。 像这样:
dialog.setCancelable(true);
您必须重写onBackPressed以关闭ProgressDialog以及取消AsyncTask
@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}
然后,当用户按back或home键时,只需调用
handleOnBackButton()
。您可以使用onKeyDown()
方法执行此操作。我发现后退按钮事件在ProgressDialog(显示)中被消耗,因此该活动无法对取消进行操作。我必须在对话框中添加一个侦听器:
mProgress = ProgressDialog
.show(this, getText(R.string.progress_title),
getText(R.string.progressing), true, true,
new OnCancelListener() {
public void onCancel(DialogInterface pd) {
handleOnBackButton();
}
});
别客气
我发现在onCreateDialog期间使用活动的对话框管理并添加onDismissListener要干净得多。拒绝侦听器可以取消该任务。不需要保存对对话框的引用,这是我们唯一需要监听用户取消的地方
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方法执行完成代码。在这种情况下,我认为这是比我更好的解决方案。删除我的答案。这不会处理对话框上的取消,当用户在屏幕上单击其他地方时,可能会发生此情况。sharic19的答案似乎更符合逻辑,因为它本身就在对话框上设置了OnCancelListener。您不需要handleOnBackButton();足以设置progressDialog.setCancelable(true);为了让它在后退按钮上做出反应。
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...
}
});