2013-08-05 4 views
6

In meiner Anwendung möchte ich den Benutzer eine Taste drücken und dann 5 Minuten warten. Ich weiß, das klingt schrecklich, aber geh einfach damit. Die verbleibende Zeit in der Wartezeit von 5 Minuten sollte in der Fortschrittsanzeige angezeigt werden.Wie verwende ich asynctask, um einen Fortschrittsbalken anzuzeigen, der rückwärts zählt?

Ich benutzte einen CountDownTimer mit einer Textansicht zum Countdown, aber mein Chef will etwas, das besser aussieht. daher die Begründung für einen Fortschrittsbalken.

+0

Mit 'setProgress()' können Sie den Fortschritt beliebig einstellen. Rufen Sie es einfach an, wenn Sie es aktualisieren möchten. – Geobits

+1

Wenn es eine festgelegte Zeit ist, eine falsche Fortschrittsbalken machen .. Vielleicht ein Gif, das 5 Minuten dauert. – NightSkyCode

+5

Aus den Dokumenten für 'AsyncTask' ... **" AsyncTasks sollte idealerweise für kurze Operationen (höchstens ein paar Sekunden) verwendet werden. "** - Sie sollten wirklich nicht eine 5-minütige' AsyncTask' laufen lassen. – Squonk

Antwort

33

Sie können etwas tun ..

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

Dann eine async Aufgabe schreiben Fortschritt zu aktualisieren ..

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

Diese Ihren Zweck lösen sollte und es nicht sogar UI Profilblock ..

+0

Bitte akzeptieren Sie die Antwort, wenn es Ihren Zweck gelöst hat. Es wird anderen helfen, die richtige Antwort zu finden. danke – Sushil

+1

ändern Sie den zweiten Parameter von AsyncTask auf Integer als Sie nicht müssen, um Fortschritt [0] zu Integer zu analysieren .. und einfach schreiben publishProgress (Fortschritt) ohne "" + – Nepster

+3

veraltet: http://stackoverflow.com/questions/10285047/showdialog-deprecated-whats-the-alternative –

Verwandte Themen