2014-03-25 52 views
1

我已經創建了一個AsyncTask。無法取消與AsyncTask取消按鈕在Android

onPreExecute()中創建了一個進度對話框。 創建對話框本身取消按鈕被添加到對話框。 哪個任務被取消。

在onPostExecute()中,對話框被取消。

Issue: 點擊取消按鈕,我們已經到達onPostExecute() 在這裏,我們不進入取消按鈕onclick監聽器。

如果它在inBackground()中,那麼它會正確進入取消按鈕的onClick監聽器。

如何處理用戶點擊取消的時刻,並且用戶進入onPostExecute(),那爲什麼不能執行onClick監聽器?

回答

0

您可以檢查onPostExecute中的boolean變量。如果它真的做你的工作,否則退出或返回該代碼。你可以在你的cancel button上設置布爾變量。

boolean canExecute = true; 

PostExcute

while(canExecute){} 

並在取消按鈕設定到canExecutefalse;

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();