我创建了一个AsyncTask。
在onPreExecute()中创建一个进度对话框。 在创建对话框时,取消按钮被添加到对话框中。 在哪个任务被取消。
在onPostExecute()中,对话框被取消。
问题: 我们点击取消按钮的点,我们已经到达onPostExecute() 在这里,我们不会进入取消按钮onclick Listener。
如果它是inBackground(),那么它正确地进入取消按钮的onClick Listener。
如何处理用户点击取消,用户进入onPostExecute()的那一刻,那就是为什么不能执行onClick监听器?
答案 0 :(得分:0)
您可以在boolean
中查看onPostExecute
变量。如果它是真的你的工作退出或从该代码返回。您可以在cancel button
上设置布尔变量。
像
boolean canExecute = true;
并在PostExcute
执行
while(canExecute){}
并在取消按钮中设置canExecute
至false
;
答案 1 :(得分:0)
我认为问题并不完全是你所描述的。 (没有代码就不容易了......请发一些代码)
一旦你到达onPostExecute并且当用户点击取消时对话框还没有解除:执行取消监听器,但asyncTask.cancel(...)
将失败:即它返回false
(因为任务已经执行了。)
如果您需要中断onPostExecute
代码:然后在AsyncTask.doInBackground中移动该代码并尽可能简单地取消按钮代码:
if(asyncTask.cancel(true)){
dialog.dismiss();
}else{
//the asyncTask is already in the onPostExecute
//the dialog will be dismissed in the onPostExecute... so don't do anything.
}
保持onPostExecute()的代码尽可能简单:
dialog.dismiss();