我有一个AsyncTask,我在onPreExecute中显示ProgressDialog,然后在onPostExecute中再次隐藏它,比如
final class UploadTask extends AsyncTask {
ProgressDialog dialog = new ProgressDialog(...);
protected onPreExecute() {
dialog.show();
}
protected onPostExecute() {
dialog.hide();
}
};
该对话框是可取消的,当我在执行AsyncTask期间按下取消按钮时,该对话框确实会消失。
当发生这种情况时,我想运行一些代码来取消AsyncTask(现在,即使他认为ProgressDialog消失了,AsyncTask仍在运行并最终完成)。我尝试从ProgressDialog派生我自己的类,然后执行
setOnDismissListener(new OnDismissListener() {
@Override public void onDismiss(DialogInterface d) {
/* do something */
}
};
(或与OnCancelListener类似的东西),但这绝不会被调用。
有什么想法吗?我只需要一些机制让用户在显示ProgressDialog时取消正在运行的AsyncTask。
答案 0 :(得分:14)
我没有测试过这个,但尝试这样的事情:
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);
}
};
答案 1 :(得分:1)
我认为你正在寻找这个:onCancelled()
http://developer.android.com/reference/android/os/AsyncTask.html