2016-08-09 9 views
0

Andorid

Ich möchte progressdialog während der Umbenennung Aufgabe zeigen. Der Dialog sollte nach dem Klicken auf Umbenennen angezeigt werden. Der Fortschrittsdialog erscheint jedoch, nachdem die Umbenennungsfunktion (Schleife) beendet wurde. Hier ist mein CodeIch mache eine Umbenennung in Android

public void onRenameClicked(View v){ 
    ProgressTask task = new ProgressTask(); 
    task.execute(); 
    for(int i = 0; i < num_of_files; i++){ 
      rename(file[i]); 
    } 
} 

und ist hier Innerclass Dialog zu zeigen

class ProgressTask extends AsyncTask<Integer, Void, Void>{ 
    ProgressDialog pd = new ProgressDialog(MainActivity.this); 
    @Override 
    protected Void doInBackground(Integer... i) { 
     for(int j = 0; j < item.size(); j++) { 
      pd.setProgress(j); 
      pd.setMessage((j) + "/" + item.size()); 
     } 
     return null; 
    } 
    @Override 
    protected void onPreExecute() { 
     pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     pd.setTitle("변경중"); 
     pd.setMax(item.size()); 
     pd.show(); 
    } 
} 
+2

Sollte sich Ihre Umbenennungsschleife nicht in 'doInBackground()' befinden? – Shaishav

Antwort

0

Sie haben

verwenden
@Override 
protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     pd.setProgress(values[0]); 
     pd.setMessage((values[0]) + "/" + values[1]); 
} 

und

publishProgress(j, item.size()); 

im doInBackground(). Diese Änderungen sind erforderlich, da die setProgress und setMessage im UI-Thread nicht im Hintergrund ausgeführt werden müssen.

+1

Sie müssen auch Ihre Klasse ändern: AsyncTask . Der Typ in der Mitte ist der für die Fortschrittsaktualisierungen. – Thommy

+0

yep @Thommy, stimme zu – Lino

+0

@Changs hat es geholfen? – Lino

0

Sie erkennen, dass Sie Ihre asynchrone Aufgabe aufrufen, ohne Daten .. daher ist es schnell fertig. Sie sollten die Dateiliste wahrscheinlich über Argumente in die AsyncTask eingeben und diese Aufrufe dann für jede Datei entsprechend verarbeiten und den Fortschritt der AsyncTask aktualisieren, wenn Sie mit dem Umbenennen von Dateien fertig sind.