Android: задержка в цикле с обновлением интерфейса - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь создать простой индикатор выполнения, который будет загружаться в течение ~ 10 секунд.Итак, что я хочу, так это цикл for:

for(int i = 1; i <= 100; i++) {
                    progressDialog.setProgress(i);
                    //100ms delay
                }

Спасибо

Ответы [ 3 ]

3 голосов
/ 11 января 2012

Вы можете использовать Async Task для цели

в методе preExecute (), инициализировать индекс цикла равным 0;

в потоке сна фонового процесса в течение 10 секунд, а затем вызвать метод sendUpdate для отправки.Прогресс

в индикаторе прогресса обновления postExecute для получения прогресса в параметре.

1 голос
/ 11 января 2012

Следующий код может быть полезен для вас.

public void startProgress(View view) {
    // Do something long
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            for (int i = 0; i <= 10; i++) {
                final int value = i;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        progressDialog.setProgress(value);
                    }
                });
            }
        }
    };
    new Thread(runnable).start();
}
0 голосов
/ 11 января 2012

Лучше использовать AsyncTask, который может обрабатывать прогресс без каких-либо циклов.

...