在我的Android应用程序中,我使用带有进度对话框(“请等待登录中…”)的AsynTask来与我的网页上的用户进行登录(在AsynTask中使用Web服务功能)。
当用户在设备上点击返回按钮时,我希望取消AsynTask并关闭进度对话框。
我找不到这种打断AsynTask的示例。我读到了cancel(boolean)的相关内容,但我不知道如何从UI中调用它。
有人能给我一些想法吗?
谢谢
在我的Android应用程序中,我使用带有进度对话框(“请等待登录中…”)的AsynTask来与我的网页上的用户进行登录(在AsynTask中使用Web服务功能)。
当用户在设备上点击返回按钮时,我希望取消AsynTask并关闭进度对话框。
我找不到这种打断AsynTask的示例。我读到了cancel(boolean)的相关内容,但我不知道如何从UI中调用它。
有人能给我一些想法吗?
谢谢
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方法执行完成代码。
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()
方法来实现。
您只需将ProgressDialog设置为可取消,当您点击“返回”按钮时,它将消失。就像这样:
dialog.setCancelable(true);
您需要重写onBackPressed方法,以便同时取消ProgressDialog和AsyncTask。
@Override
public void onBackPressed() {
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
}
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。dismiss监听器可以取消任务。无需保留对话框的引用,这是我们需要监听用户取消的唯一位置。