Как я могу показать несколько индикаторов прогресса один за другим? - PullRequest
0 голосов
/ 25 августа 2018

Мне нужно сделать что-то вроде этого:

  • Перебирать несколько записей массива.
  • Показывать прогрессиалог для одной записи
  • Перейти к следующей записи
  • и т. Д.

У меня возникают проблемы при отображении диалогового окна прогресса в цикле for.

Я пробовал много вариантов TimerTask и запускаю.Вот мой последний код демонстрационного демонстрационного приложения.

//In function of showing progress
for (int i = 0; i < myInfo.size() ; i++){
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new ProgressTask(timer), 1000, 1000);
}

//Here is the ProgressTask
public class ProgressTask extends TimerTask {
    Timer timer;
    public ProgressTask (Timer timer){
        this.timer = timer;
    }

    @Override
    public void run() {
        progressStatus = progressStatus + 10;
        progressBar.setProgress(progressStatus);
        if (progressStatus == 100) {
            timer.cancel();
        }
    }
}

Результат: я просто вижу диалог прогресса для первой записи.Хотя он выполняет цикл for для всех записей, я допустил некоторую ошибку в планировании задачи, моего потока выполнения или таймера.Может ли кто-нибудь помочь мне с ошибкой в ​​моем коде?

Редактировать:

Здесь - это весь код действия, если это поможет.

1 Ответ

0 голосов
/ 25 августа 2018

Ваша прогресстаска выполняется одновременно, поэтому вы получаете только один прогресс.Так что отрегулируйте задержку, чтобы выполнить по одному.

Попробуйте это

 for (int i = 0; i < 10 ; i++){
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new ProgressTask(timer),  i * 1000, 1000);
    }

 public class ProgressTask extends TimerTask {
    Timer timer;
    public ProgressTask (Timer timer){
        this.timer = timer;
    }

    @Override
    public void run() {

        progressStatus = progressStatus + 10;
        progressBar.setProgress(progressStatus);
        timer.cancel(); //Cancel timer all time bcoz you create new timer everytime.

    }

} 
...