带有progressdialog取消的Android AsyncTask

时间:2011-04-01 13:12:07

标签: android android-asynctask progressdialog

在我的Android应用程序中,我使用AsynTask with Progress Dialog(请等待登录...)用于使用我的网页登录用户(AsynTask内的Web服务功能)

当用户点击设备上的“返回”按钮时,我想解除进度对话框并取消AsynTask。

我无法找到那种中断AsynTask的例子。我读了abouth cancel(boolean)但我不知道如何从UI调用。

任何人都可以给我一些想法。

由于

4 个答案:

答案 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更清晰。解雇听者可以取消该任务。无需保留对话框的引用,这是我们需要监听用户取消的唯一地方。