2010-11-01 110 views
5

我有一個的AsyncTask我在其中顯示在onPreExecute一個ProgressDialog,並在onPostExecute再次隱藏它,像取消的AsyncTask當用戶按下後退按鈕

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

一個例子用於取消的AsyncTask HTTP ://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ – 2016-06-29 17:17:26

回答

15

我沒有測試過這一點,但嘗試這樣的事情:

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); 
     } 
}; 
+0

我決定將ProgressDialog的初始化移動到我的構造函數中,這對於一些奇怪的原因來說是有用的。你的方法也可能工作,沒有嘗試過。在任何情況下,如果有人遇到同樣的問題:請仔細閱讀您初始化ProgressDialog的點。 – 2010-11-13 17:12:20

+0

+1,謝謝,你的回答幫助了我 – 2012-12-05 10:31:27

相關問題