У меня есть пользовательский интерфейс календаря (material-calendarview), который работает так, как я хочу. Когда пользователь выбирает дату, я меняю цвет фона этой конкретной даты, а затем заменяю этот фрагмент календаря на другой фрагмент. Все это работает правильно.Пауза после обновления пользовательского интерфейса
Что я хотел бы сделать, это показать небольшую паузу после цвет фона календаря обновлен. Поскольку это работает прямо сейчас, вы можете видеть только цвет фона при изменении цвета перед заменой фрагмента. Изменение цвета почти незаметно.
Вот код для того, как изменяется эта ячейка:
calendarView.setOnDateChangedListener(new OnDateSelectedListener() {
@Override
public void onDateSelected(@NonNull MaterialCalendarView materialCalendarView, @NonNull CalendarDay calendarDay, boolean b) {
decorateSelectedDate(calendarDay.getDate());
// some other database stuff happens here
}
});
private void decorateSelectedDate(Date date) {
List<CalendarDay> list = new ArrayList<CalendarDay>();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
CalendarDay calendarDay = CalendarDay.from(calendar);
list.add(calendarDay);
calendarDays = list;
calendarView.addDecorators(new SelectionDecorator(Color.RED, calendarDays));
}
private class SelectionDecorator implements DayViewDecorator {
// the point of this class is fill in the background color for the calendar cell
// just selected by the user
private final int color;
private final HashSet<CalendarDay> dates;
public SelectionDecorator(int color, Collection<CalendarDay> dates) {
this.color = color;
this.dates = new HashSet<>(dates);
}
@Override
public boolean shouldDecorate(CalendarDay day) {
return dates.contains(day);
}
@Override
public void decorate(DayViewFacade view) {
// colors the entire calendar space
Drawable drawable = new ColorDrawable(color);
view.setBackgroundDrawable(drawable);
// my attempt to add a short delay before replacing the fragments. 5 seconds is way too long, but I'm just trying to prove that this works.
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// this invokes a method in the activity to swap out the fragments
fragmentCommunicator.onNewDateSet();
}
}
Вы можете видеть, что у меня есть команда Thread.sleep
сразу после команды для обновления пользовательского интерфейса. Однако независимо от того, сколько времени задержки я установил, происходит задержка до, пользовательский интерфейс обновляется (это должно быть наоборот), поэтому изменение цвета фона остается только вспышкой перед заменой фрагмента.
Как я могу получить UI для обновления до Задержка запуска? Очевидно, Thread.sleep
, похоже, не является ответом.
Спасибо!
Got it. Благодаря! – Alex