带有进度对话框取消的 Android AsyncTask
Posted
技术标签:
【中文标题】带有进度对话框取消的 Android AsyncTask【英文标题】:Android AsynTask with progress dialog cancel 【发布时间】:2011-07-27 16:44:28 【问题描述】:在我的 android 应用程序中,我使用带有进度对话框的 AsynTask(请等待登录 ...)通过我的网页登录用户(AsynTask 中的 Web 服务功能)
当用户点击设备上的后退按钮时,我想关闭进度对话框并取消 AsynTask。
我找不到那种中断 AsynTask 的例子。我阅读了关于取消(布尔),但我不知道如何从 UI 调用。
谁能给我意见。
谢谢
【问题讨论】:
【参考方案1】: 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 方法执行整理代码。
【讨论】:
【参考方案2】: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()
方法来完成。
【讨论】:
在这种情况下,我认为这比我的解决方案更好。删除我的答案。 这不会处理对话框中的取消,当用户在显示时单击屏幕上的其他位置时可能会发生这种情况。似乎 sharic19 的答案更合乎逻辑,因为它在对话框本身上设置了 OnCancelListener 你不需要 handleOnBackButton();足以设置 progressDialog.setCancelable(true);使其对“后退”按钮做出反应。【参考方案3】:您只需将 ProgressDialog 设置为可取消。当您单击“返回”按钮时,它会消失。 像这样:
dialog.setCancelable(true);
您必须覆盖 onBackPressed 以关闭 ProgressDialog 并取消 AsyncTask
@Override
public void onBackPressed()
YourAsyncTaskObject.cancel(true);
YourProgressDialog.dismiss();
return;
【讨论】:
【参考方案4】:我发现后退按钮事件被“显示”的 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 更加简洁。解雇侦听器可以取消任务。无需保留对对话框的引用,这是我们需要监听用户取消的唯一地方。
【讨论】:
以上是关于带有进度对话框取消的 Android AsyncTask的主要内容,如果未能解决你的问题,请参考以下文章
java 带有正面,负面和取消侦听器的Android对话框。