Запустите CountDownTimer для массива дат

У меня есть массив объектов, который выглядит так:

public class Time {

    public String start_time;

    public String finish_time;

    public Time(String start_time, String finish_time) {
        this.start_time = start_time;
        this.finish_time = finish_time;
    }
}

Мне нужно реализовать таймер в моем фрагменте следующим образом:

он должен начать обратный отсчет с первого элемента в массиве таким образом, что для одного элемента Time он должен сначала начать обратный отсчет до времени, оставшегося до достижения start_time, затем, когда таймер достигает start_time, он должен начать обратный отсчет до finish_time и, в конце концов, когда он достигает finish_time, он должен выполнить те же предыдущие действия для следующего элемента в массиве. И когда весь массив будет готов, он должен отображать 00:00:00.

PS: время начала и время окончания имеют следующий формат: HH:mm однако таймер должен быть HH:mm:ss

Может ли кто-нибудь помочь с реализацией этого или хотя бы дать идею?


person Denis Yakovenko    schedule 05.04.2015    source источник
comment
Опубликуйте свой код, пожалуйста   -  person Heshan Sandeepa    schedule 05.04.2015
comment
Я еще не придумал идею для реализации таймера. Вот почему я спрашиваю здесь. Я думаю, что мне следует создать отдельный класс, который расширяет CountDownTimer и что-то делать с методом onFinish, но до сих пор нет идей...   -  person Denis Yakovenko    schedule 05.04.2015


Ответы (1)


Наконец нашел подходящий ответ. Большое спасибо парню, который помог мне с этим:

класс Клазз {

private Timer dateTimer;

private Timer remainderTimer;

private Date nextDate;

private boolean remainderTimerStarted;

private static final long REMINDER_UPDATE_INTERVAL = 1000;

private static final String[] DATES = { "12.04.2015 22:21", "12.04.2015 22:22", "12.04.2015 22:23" };

private int currentIndex;

public Clazz() {
    dateTimer = new Timer();
}

public static void main(String[] args) {
    Clazz instance = new Clazz();
    instance.run();
}

private void run() {
    nextDate = parseDate(DATES[currentIndex]);
    schedule();
}

public void schedule() {
    runSecondsCounter();
    dateTimer.schedule(new TimerTask() {

        @Override
        public void run() {

            System.out.println("Current date is:" + new Date());
            currentIndex++;
            if (currentIndex < DATES.length) {
                nextDate = parseDate(DATES[currentIndex]);
                System.out.println("Next date is:" + nextDate);
                schedule();
            } else {
                remainderTimer.cancel();
            }
        }
    }, nextDate);

}

private Date parseDate(String nextDate) {
    Date date = null;
    DateFormat format = new SimpleDateFormat("dd.MM.yyyy HH:mm",
            Locale.ENGLISH);
    try {
        date = format.parse(nextDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

private void runSecondsCounter() {
    if (remainderTimerStarted) {
        remainderTimer.cancel();
    }

    remainderTimer = new Timer();
    remainderTimer.scheduleAtFixedRate(new TimerTask() {

        @Override
        public void run() {
            remainderTimerStarted = true;
            long remains = nextDate.getTime() - new Date().getTime();
            System.out.println("Remains: " + (remains / 1000) + " seconds");
        }
    }, REMINDER_UPDATE_INTERVAL, REMINDER_UPDATE_INTERVAL);
}

}

person Denis Yakovenko    schedule 12.04.2015