В настоящее время я использую библиотеку MaterialDateTimePicker для выбора даты, и я пытаюсь прослушать, когда пользователь выбирает день в календаре, чтобы открыть другой список, зависит от дня, который выбрал пользователь.
Я использовал dpd.setOnDateSetListener
и public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth)
.Тем не менее, оба они запускаются только тогда, когда пользователь нажимает кнопку ОК, и он не срабатывает сразу, когда пользователь выбирает дату.
Есть ли способ узнать, когда пользовательвыбирает дату?
На приведенном ниже снимке экрана видно, что все дни в этом месяце отключены, даже если выбран отключенный день, и если пользователь нажимает кнопку ОК, он будет включен.Так что я пытаюсь сделать одну из этих трех вещей:
- Отключить кнопку ОК, если текущий день отключен
- Или удалить день автоматического выбора дня в календареоткрывается, поэтому у пользователя не выбрана дата, значит кнопка ОК не получит никаких данных.
- Или установите день автоматического выбора на первый включенный день в календаре.
Моя проблема сейчас в том, что если пользователь нажал кнопку «ОК», даже если выбранный автоматически день является отключенным днем, то появится всплывающее окно с отображением доступного времени в этот день для ex-mp среды (с 10 до 15)
Мой текущий код для установки включенных и отключенных дней:
Calendar day;
List<Calendar> weekends = new ArrayList<>();
int weeks = 5;
for (int i = 0; i < (weeks * 7); i = i + 7) {
for (int d = 0; d < slots.getResponse().getDays().size(); d++) {
day = Calendar.getInstance();
switch (slots.getResponse().getDays().get(d).getDay()) {
case "Sunday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.SUNDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Monday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.MONDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Tuesday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.TUESDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Wednesday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.WEDNESDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Thursday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.THURSDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Friday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.FRIDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
case "Saturday":
day.add(Calendar.DAY_OF_YEAR, (Calendar.SATURDAY - day.get(Calendar.DAY_OF_WEEK) + i));
weekends.add(day);
break;
}
}
}
Calendar[] SelectableDays = weekends.toArray(new Calendar[weekends.size()]);
dpd.setSelectableDays(SelectableDays);
Calendar minday = Calendar.getInstance();
minday.add(Calendar.DAY_OF_YEAR, minday.get(Calendar.DAY_OF_MONTH) + 1);
dpd.setMinDate(minday);
/*
Disable Upcoming Daysa
*/
Calendar UpcomingDay;
boolean FirstLoop = true;
List<Calendar> nextDaysList = new ArrayList<>();
for (int i = 0; i < slots.getResponse().getExecTime() - 1; i++) {
UpcomingDay = Calendar.getInstance();
if (FirstLoop) {
UpcomingDay.add(Calendar.DAY_OF_MONTH, i);
i--;
FirstLoop = false;
} else {
UpcomingDay.add(Calendar.DAY_OF_MONTH, i + 1);
}
nextDaysList.add(UpcomingDay);
}
Calendar[] DisabledDays = nextDaysList.toArray(new Calendar[nextDaysList.size()]);
dpd.setDisabledDays(DisabledDays);