2010-11-01 41 views
5

Tôi có một AsyncTask trong đó tôi thấy một ProgressDialog trong onPreExecute, và giấu nó một lần nữa trong onPostExecute, một cái gì đó giống nhưHủy AsyncTask khi người dùng nhấn lại nút

final class UploadTask extends AsyncTask { 
    ProgressDialog dialog = new ProgressDialog(...); 

    protected onPreExecute() { 
     dialog.show(); 
    } 
    protected onPostExecute() { 
     dialog.hide(); 
    } 
};

Hộp thoại là hủy và thực sự biến mất khi tôi nhấn nút hủy trong khi thực thi AsyncTask.

Khi điều này xảy ra, tôi muốn chạy một số mã để hủy AsyncTask (ngay bây giờ, thậm chí nghĩ rằng ProgressDialog biến mất, AsyncTask tiếp tục chạy và cuối cùng hoàn thành). Tôi đã cố gắng phát triển lớp học của riêng mình từ ProgressDialog và sau đó làm

setOnDismissListener(new OnDismissListener() { 
@Override public void onDismiss(DialogInterface d) { 
    /* do something */ 
    } 
};

(hoặc cái gì đó tương tự với OnCancelListener), nhưng điều này không bao giờ được gọi.

Bất kỳ ý tưởng nào? Tôi chỉ cần một số cơ chế để người dùng hủy AsyncTask đang chạy trong khi ProgressDialog đang hiển thị.

+0

một ví dụ cho hủy một AsyncTask http : //www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

Trả lời

15

tôi đã không kiểm tra này, nhưng thử một cái gì đó như thế này:

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

Tôi quyết định di chuyển initialisation của ProgressDialog vào constructor của tôi, mà đối với một số lý do kỳ lạ đã làm các trick. Phương pháp của bạn có thể hoạt động tốt, chưa thử. Trong mọi trường hợp, nếu có ai gặp vấn đề tương tự: hãy chơi xung quanh với điểm mà tại đó bạn khởi tạo ProgressDialog. –

+0

+1 và cảm ơn, câu trả lời của bạn đã giúp tôi –

Các vấn đề liên quan