在我的Android应用程序中,我使用AsynTask with Progress Dialog(请等待登录...)用于使用我的网页登录用户(AsynTask内的Web服务功能)
当用户点击设备上的“返回”按钮时,我想解除进度对话框并取消AsynTask。
我无法找到那种中断AsynTask的例子。我读了abouth cancel(boolean)但我不知道如何从UI调用。
任何人都可以给我一些想法。
由于
答案 0 :(得分:20)
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方法。
答案 1 :(得分:9)
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 :(得分:5)
您只需将ProgressDialog设置为可取消。当您单击“返回”按钮时它将消失。 像这样:
dialog.setCancelable(true);
您必须覆盖onBackPressed以关闭ProgressDialog以及取消AsyncTask
@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}
答案 3 :(得分:1)
我发现后退按钮事件被消耗了'show'n的ProgressDialog,因此Activity不会对取消行动。我不得不在对话框中添加一个监听器:
mProgress = ProgressDialog
.show(this, getText(R.string.progress_title),
getText(R.string.progressing), true, true,
new OnCancelListener() {
public void onCancel(DialogInterface pd) {
handleOnBackButton();
}
});
没关系。
我发现使用Activity的对话框管理并在onCreateDialog期间添加onDismissListener更清晰。解雇听者可以取消该任务。无需保留对话框的引用,这是我们需要监听用户取消的唯一地方。