繁体   English   中英

使用“进度对话框”按钮取消AsyncTask

[英]Cancel AsyncTask with Progress Dialog button

我需要使用进度对话框中的按钮来取消AsyncTask。

我已经使用按钮创建了“进度”对话框。 这里是:

@Override
protected void onPreExecute() {
    pDialog = new ProgressDialog(DSDactivity.this);
    pDialog.setMessage(getResources().getString(R.string.pDialog));
    pDialog.setCancelable(false);
    pDialog.setButton("Cancel", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            pDialog.dismiss();
            asyncCodelist.cancel(true);

        }
    });
    pDialog.show();
}

我有两个问题:

  1. 当我单击进度对话框上的“取消”时,异步任务继续执行他正在做的事情

  2. Eclipse给了我这种减弱:

不建议使用AlertDialog类型的方法setButton(CharSequence,DialogInterface.OnClickListener)

@Override
protected void onPreExecute() {
  pDialog = new ProgressDialog(DSDactivity.this);
  pDialog.setMessage(getResources().getString(R.string.pDialog));
  pDialog.setCancelable(true);
  pDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
      myTask.cancel(true);
      dialog.dismiss();
    }
  }
}

然后,正如我的链接所述,创建您的AsyncTask并将其存储:

MyAsyncTask myTask=null;

并像这样执行它:

myTask = new MyAsyncTask();
myTask.execute();
  1. Asynctask不会仅通过myTask.cancel(true);完全停止myTask.cancel(true);

如文档所述:

 To ensure that a task is cancelled as quickly as possible, you should always check the return value of isCancelled() periodically from doInBackground(Object[]), if possible (inside a loop for instance.)

这里更多

  1. setButton()方法现在不推荐使用ProgressDialog ,因此发出警告。 它肯定会工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM