AsyncTask с ProgressDialog и индикатором выполнения - PullRequest
19 голосов
/ 25 июля 2011

Я пытаюсь использовать AsyncTask для загрузки файла определенной длины. Мой AsyncTask выглядит примерно так:

protected void onPreExecute() {
    dialog = ProgressDialog.show(MyActivity.this, null, "Loading", false);
}


protected void onProgressUpdate(Integer... values) {
    if (values.length == 2) {
        dialog.setProgress(values[0]);
        dialog.setMax(values[1]);
    }
}

в моей реализации doInBackground() я вызываю publishProgress(bytesSoFar, maxBytes); внутри цикла загрузки, а в onPostExecute() я звоню dialog.dismiss().

Однако я не могу заставить ProgressDialog показывать что-либо, кроме неопределенного счетчика. Я хочу видеть горизонтальный индикатор выполнения, который показывает прогресс по мере загрузки. Я отладил и вижу, что onProgressUpdate() вызывается с нормальными значениями, и что методы диалога вызываются.

Ответы [ 2 ]

28 голосов
/ 25 июля 2011

Добавить стиль в диалоговое окно прогресса, прежде чем показывать его .setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

9 голосов
/ 26 апреля 2012

Используйте этот код в вашем onPreExecute().

 ProgressDialog prog;
 prog = new ProgressDialog(ctx);
 prog.setTitle(title);
 prog.setMessage(msg);       
 prog.setIndeterminate(false);
 prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
 prog.show();
...