2013-08-05 21 views
6

Uygulamamda kullanıcının bir düğmeye basmasını ve ardından 5 dakika beklemesini istiyorum. Bu kulağa korkunç geliyor biliyorum ama sadece onunla gidin. 5 dk bekleme süresinde kalan süre, ilerleme çubuğunda gösterilmelidir.Aşağı doğru ilerleyen bir ilerleme çubuğu görüntülemek için asynctask nasıl kullanılır?

Geri sayım için bir metin görünümü olan bir CountDownTimer kullanıyordum ama patronum daha iyi görünen bir şey istiyor. Bu nedenle bir ilerleme çubuğu için gerekçe.

+0

İşlemi, setProgress() 'ile istediğiniz gibi ayarlayabilirsiniz. Sadece güncellemek istediğinizde arayın. – Geobits

+1

Eğer ayarlanmış bir süre sahte bir ilerleme çubuğu yaparsa .. Belki son 5 dakikada bir gif. – NightSkyCode

+5

AsyncTask'ın belgelerinden ... ** AsyncTask'lar kısa süreli operasyonlarda (en fazla birkaç saniye) ideal olarak kullanılmalıdır. ** - gerçekten 5 dakikalık bir AsyncTask ' – Squonk

cevap

33

Böyle bir şey yapabiliriz ..

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; 
    } 
} 

Sonra ilerlemeyi güncellemek için bir zaman uyumsuz görev yazmayı .. Bu amaca çözmek gerekir ve alışkanlık hatta UI sırtının engellemek

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

..

+0

Lütfen amacınızı çözdüyse cevabı kabul edin. Başkalarının doğru cevabı belirlemesine yardımcı olacaktır. Teşekkürler – Sushil

+1

AsyncTask'ın ikinci parametresini Tamsayıya ilerlemeniz gerekmediğinden, tamsayıya [0] dönüştürmeyin ve sadece "+ – Nepster

+3

kullanımdan kaldırılsın: http://stackoverflow.com/questions"/10285047/showdialog-kullanım dışı-whats-the-alternative –

İlgili konular