2015-08-21 44 views
2

如何從此AsyncTask中實現的ProgressDialog中取消AsyncTask。在AsyncTask中中止AsyncTask

@Override 
protected Void doInBackground(Void... params) 
{ 
    try 
    { 
     FTPHelper ftpHelper = new FTPHelper(_context); 
     ftpHelper.SincronizarArquivos(); 
    } 
    catch... 

@Override 
protected void onPreExecute() 
{ 
    _dialog.setMessage("Aguarde, sincronizando arquivos..."); 
    _dialog.setCancelable(false); 
    _dialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancelar", new DialogInterface.OnClickListener() 
    { 
     @Override 
     public void onClick(DialogInterface dialog, int which) 
     { 
      // This not works for cancel AsyncTask 
      cancel(true); 
      ... 

由於doInBackground(Void ... params)中沒有循環,所以我取消或返回。我如何從ProgressDialog中取消AsyncTask?

+0

實例看來,應實現內部'FTPHelper.SincronizarArquivos'方法進行檢查一些標誌,然後只設置該標誌上你'的onClick '回調。 –

回答

0

對話框和AsyncTask都有一個「取消」方法,所以當你在對話框中調用cancel時,它將取消對話框。

解決方案是讓對話框調用AsyncTask的取消功能。從這個問題我不能完全推斷對話框和任務中的代碼鏈接的方式,但在本質上,如果代碼...

AsyncTask myAT; 

然後在對話框中:

myAT.cancel(); 
0

呼叫

MyAsyncTask.this.cancel(true); 

Dialog內。

這裏MyAsyncTaskAsyncTask子類的名稱。

注意:這將工作(只)如果Dialog被裏面的AsyncTask