Android-ProgressBar-Nachricht ändern, wenn Prozent geladen ist
Ich versuche zu Nachricht hinzufügen, wenn die progress bar lädt auf einen bestimmten Prozent. Also, wenn 10 Prozent geladen ist, einen Titel oder eine Nachricht angezeigt, dass etwas geladen wird.
Ich kann es tun und es zu zwingen, zu schließen.
Irgendwelche Ideen, wie es zu tun.
Unten ist mein Beispielcode
public void onClick(View v) {
//prepare for a progress bar dialog
progressBar = new ProgressDialog(v.getContext());
progressBar.setCancelable(true);
progressBar.setMessage("File downloading ...");
progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressBar.setProgress(0);
progressBar.setMax(100);
progressBar.show();
//getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
//reset progress bar status
progressBarStatus = 0;
//reset filesize
fileSize = 0;
new Thread(new Runnable() {
public void run() {
while (progressBarStatus < 100) {
//process some tasks
progressBarStatus = doSomeTasks();
//your computer is too fast, sleep 1 second
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//Update the progress bar
progressBarHandler.post(new Runnable() {
public void run() {
progressBar.setProgress(progressBarStatus);
}
});
}
//ok, file is downloaded,
if (progressBarStatus >= 100) {
//sleep 2 seconds, so that you can see the 100%
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//close the progress bar dialog
progressBar.dismiss();
}
}
}).start();
}
});
}
//file download simulator... a really simple
public int doSomeTasks() {
while (fileSize <= 1000000) {
fileSize++;
setProgressBarIndeterminate(true);
if (fileSize == 100000) {
progressBar.setMessage("10 percent loaded");
return 10;
} else if (fileSize == 200000) {
progressBar.setMessage("20 percent loaded");
return 20;
} else if (fileSize == 300000) {
progressBar.setMessage("30 percent loaded");
return 30;
}
//...add your own
}
return 100;
}
Dank StackOverFlow-Benutzer
- Sollte man wirklich wechseln, um mithilfe der AsyncTask, es bietet eine bessere Schnittstelle für den Umgang mit dieser Art von Problemen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, update progress bar wie unten code...
bezeichnen AsyncTask, wo Sie wollen, um die Fortschritte zu zeigen-bar...
while(counter <= 10)
& ändern publishProgress wiepublishProgress(counter*10);
Verwenden AsynTask anstelle von "Basis" - threads. Innerhalb von asynctask verwenden Sie die callback -
onProgressUpdate
zu nennenprogressBar.setProgress(progressBarStatus);
Kann man nur Zugriff auf UI-Elemente aus dem Haupt-thread.