Расписание занятий с отображением текущей пары по времени
Пишется приложение для вуза, техникума, колледжа и т д(не коммерческий). Нужно чтобы согласно текущему времени отображалась текущая пара, а когда наступает перемена, сразу переходила на другую. Сейчас отображает текущую пару, но после того как пара закончилась всё равно продолжает выделятся. Если обновить то отобразит 2 пару если она началась. Для этого написал условие, но не очень хорошее, в некоторых моментах не работает, пытался сделать через таймер таск, чтобы через каждые 5 минут вызывался этот адаптер для проверки условий. Но он работает так же не корректно. В адаптер приходят время начала пары и время конца пары. Думал сделать через планировщик по типу Firebase job dispatcher. Прошу натолкнуть на мысль...
final Schedule schedule = MSched.get(i);
LocalTime time_start;
LocalTime time_end;
LocalTime time_now;
if(!MSched.get(i).getLesson_time().equals("")) {
time_start = LocalTime.parse(MSched.get(i).getLesson_time());
time_end = LocalTime.parse(MSched.get(i).getLesson_time_end());
time_now = LocalTime.now();
String date = new SimpleDateFormat("E").format(new Date());
if (MINUTES.between(time_start, time_now) > 0 && MINUTES.between(time_end, time_now) < 0 && date.equals(DayWeek)) {
timer = new Timer();
timerTask = new mTimerTask();
timer.schedule(timerTask, 1000, 10000);
//Изменение стилей для отображения пары которая идёт
} else {
//Изменение стилей для отображения пар которые ещё не начались
}
}else {
//Изменение стилей для отображения пар которые ещё не начались
}
}
public class mTimerTask extends TimerTask{
ScheduleAdapter scheduleAdapter;
@Override
public void run() {
scheduleAdapter = new ScheduleAdapter(Mcontext, MSched, DayWeek);
}
}
Ответы (1 шт):
Решил вопрос через PostDelayed. Создал новый Runnable, задержку в минуту. При сворачивании или переключении между фрагментами поток ремувается.
handler.postDelayed(UpdateSched, 100000);
private Runnable UpdateSched = new Runnable() {
@Override
public void run() {
adapter = new ScheduleAdapter(getContext(), list, DayWeek);
recyclerView.setAdapter(adapter);
handler.postDelayed(this, 100000);
}
};
@Override
public void onPause() {
super.onPause();
handler.removeCallbacks(UpdateSched);
}
