Фоновая операция и ProgressDialog - PullRequest
0 голосов
/ 01 июня 2011

Я создал AsyncTask для выполнения моей фоновой операции. Пользовательский интерфейс показывает ProgressDialog. Я передаю Context конструктору AsyncTask.

Когда я хочу манипулировать текстом ProgressDialog из AsyncTask, возникает ошибка, поскольку поле ProgressDialog создается другим потоком.

Советы или идеи о том, как заставить AsyncTask взаимодействовать с блоком ProgressDialog, или лучший способ создать блок ProgressDialog?

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Вы не должны общаться с пользовательским интерфейсом из функции AsyncTask doInBackground. Вместо этого используйте функцию onProgressUpdate.

private class BackgrounTask extends AsyncTask<Integer, Integer, Integer> {

    protected Integer doInBackground(Integer... count){
       int max = count[0];
       for (int i = 0; i < count; i++) {
         publishProgress(i, max);
       }
       return max;
    }

    protected void onProgressUpdate(Integer... progress) {
       int cur = progress[0];
       int max = progress[1];

       //update your progress dialog here
    }

    protected void onPostExecute(Integer result) {
       //process result
    }
}
0 голосов
/ 01 июня 2011

Используйте метод AsyncTask.publishProgress() и переопределите метод AsyncTask.onProgressUpdate(). В этом методе обновите свой диалог прогресса.

...