我有一个异步函

final class UploadTask extends AsyncTask {
   ProgressDialog dialog = new ProgressDialog(...);

   protected onPreExecute() {
      dialog.show();
   }
   protected onPostExecute() {
      dialog.hide();
   }
};

对话框是可以取消的,并且当我在执行异步执行过程中按“取消”按钮时确实消失了。

发生这种情况时,我也想运行一些代码以取消异步函数(现在,甚至以为他的进度驱动器消失了,异步措施不断运行并最终完成)。我尝试从ProgressDialog中得出自己的课程,然后做

setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
   /* do something */
   }
};

(或与Oncancellistener类似的东西),但这根本不会被调用。

有任何想法吗?我只需要某种机制,即可在progressDialog显示时取消运行的异步。

有帮助吗?

解决方案

我没有测试过,但是尝试这样的事情:

    final class UploadTask extends AsyncTask implements OnDismissListener{
       ProgressDialog dialog = new ProgressDialog(...);

       protected onPreExecute() {
           dialog.setOnDismissListener(this);
          dialog.show();
       }
       protected onPostExecute() {
          dialog.hide();
       }

       @Override
        public void onDismiss(DialogInterface dialog) {
            this.cancel(true);
        }
};

其他提示

我认为您正在寻找:oncancelled()

http://developer.android.com/reference/android/os/asynctask.html

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top