2013-08-05 32 views
6

Trong ứng dụng của tôi, tôi muốn người dùng nhấn một nút rồi đợi 5 phút. tôi biết điều này nghe có vẻ khủng khiếp nhưng chỉ cần đi với nó. Thời gian còn lại trong khoảng thời gian chờ 5 phút sẽ được hiển thị trên thanh tiến trình.Cách sử dụng asynctask để hiển thị thanh tiến trình đếm ngược?

Tôi đã sử dụng một CountDownTimer với chế độ xem văn bản để đếm ngược nhưng ông chủ của tôi muốn thứ gì đó trông đẹp hơn. do đó lý do cho một thanh tiến trình.

+0

Bạn có thể đặt tiến trình thành bất kỳ thứ gì bạn thích bằng 'setProgress()'. Chỉ cần gọi nó bất cứ khi nào bạn muốn cập nhật nó. – Geobits

+1

Nếu thời gian đã đặt của nó tạo thanh tiến trình giả .. Có thể là gif kéo dài 5 phút. – NightSkyCode

+5

Từ tài liệu cho 'AsyncTask' ... ** "AsyncTasks lý tưởng nên được sử dụng cho các hoạt động ngắn (một vài giây nhiều nhất.)" ** - bạn thực sự không nên chạy trong 5 phút' AsyncTask' – Squonk

Trả lời

33

Bạn có thể làm một cái gì đó như thế này ..

public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
private ProgressDialog mProgressDialog; 

@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case DIALOG_DOWNLOAD_PROGRESS: 
     mProgressDialog = new ProgressDialog(this); 
     mProgressDialog.setMessage("waiting 5 minutes.."); 
     mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mProgressDialog.setCancelable(false); 
     mProgressDialog.show(); 
     return mProgressDialog; 
    default: 
    return null; 
    } 
} 

Sau đó viết một nhiệm vụ async để cập nhật những tiến bộ ..

private class DownloadZipFileTask extends AsyncTask<String, String, String> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 

    @Override 
    protected String doInBackground(String... urls) { 
     //Copy you logic to calculate progress and call 
     publishProgress("" + progress); 
    } 

    protected void onProgressUpdate(String... progress) {   
    mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
    } 

    @Override 
    protected void onPostExecute(String result) {   
     dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
    } 
} 

này nên giải quyết mục đích của bạn và nó sẽ không thậm chí chặn UI lốp ..

+0

Vui lòng chấp nhận câu trả lời nếu nó giải quyết được mục đích của bạn. Nó sẽ giúp người khác xác định câu trả lời đúng. cảm ơn – Sushil

+1

thay đổi tham số thứ hai của AsyncTask thành Số nguyên hơn là bạn không cần phân tích cú pháp tiến trình [0] thành Số nguyên và chỉ cần viết publishProgress (tiến trình) mà không có "" + – Nepster

+3

không được chấp nhận: http://stackoverflow.com/questions/10285047/showdialog-deprecated-whats-the-alternative –

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