Выбор даты - Изменить выбранную дату Android - PullRequest
0 голосов
/ 12 февраля 2019

Я использовал Выбор даты и установил максимальную дату как 11 февраля 2020 года, когда сегодняшняя дата - 12 февраля 2019 года.

У меня возникла проблема при смене года при нажатии кнопки «год» в верхней части даты.подборщика.Когда средство выбора даты инициализируется на текущую дату (сегодняшняя дата: 12 февраля 2019 года), тогда, если я изменю год на февраль 2020 года, средство выбора даты будет отображать 12 февраля 2020 года в качестве заголовка, но выбранный день в представлении календаря будет 11 февраля в качестве выбранного.

См. Ниже изображения ::

img 1: средство выбора даты, инициализированное как сегодняшняя дата

enter image description here

img 2: бездень смены, год смены

enter image description here

img 3: заголовок 12 февраля, 2020 г. по выбору.Но максимальная дата - 11 февраля 2020 года. В календаре выбрано 11 число.Кроме того, по нажатию Ok получается 12 февраля, 2020.

enter image description here

Я хочу удалить этот выбор или просто сделать макс.дата, выбранная в случае изменения года.

1 Ответ

0 голосов
/ 14 февраля 2019

После нескольких попыток и нескольких поисков в Google, наконец, нашел решение выше:

        datePicker.init(currentCalendar.get(Calendar.YEAR),
        currentCalendar.get(Calendar.MONTH),
        currentCalendar.get(Calendar.DAY_OF_MONTH),
        new DatePicker.OnDateChangedListener() {
          @Override
          public void onDateChanged(DatePicker view, int selYear, int selMonth,
              int selDay) {
            String dateSelectionType =
                getDateSelectionType(minDate.getTimeInMillis(),
                    maxDate.getTimeInMillis(), selYear, selMonth, selDay);
            if (dateSelectionType.equals("IS_BETWEEN_RANGE")) {
              return;
            }
            if (dateSelectionType.equals("IS_LESS_THAN_MIN")) {
              datePicker.updateDate(minDate.get(Calendar.YEAR), minDate.get(Calendar.MONTH),
                  minDate.get(Calendar.DAY_OF_MONTH));

              return;
            }
            if (dateSelectionType.equals("IS_MORE_THAN_MAX")) {
              datePicker.updateDate(maxDate.get(Calendar.YEAR),
                  maxDate.get(Calendar.MONTH), maxDate.get(Calendar.DAY_OF_MONTH));
              return;
            }
          }
        });

добавьте другой метод, чтобы узнать, будет ли выбранная дата после максимальной или до минимальной даты ::

public static String getDateSelectionType(long minDate, long maxDate,
          int selectedYear, int selectedMonth, int selectedDayOfMonth) {


Calendar minDateCalendar = Calendar.getInstance();
    minDateCalendar.setTimeInMillis(minDate);
    minDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    minDateCalendar.set(Calendar.MINUTE, 0);
    minDateCalendar.set(Calendar.SECOND, 0);
    minDateCalendar.set(Calendar.MILLISECOND, 0);

    Calendar maxDateCalendar = Calendar.getInstance();
    maxDateCalendar.setTimeInMillis(maxDate);
    maxDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    maxDateCalendar.set(Calendar.MINUTE, 0);
    maxDateCalendar.set(Calendar.SECOND, 0);
    maxDateCalendar.set(Calendar.MILLISECOND, 0);

    Calendar selectedDateCalendar = Calendar.getInstance();
    selectedDateCalendar.set(Calendar.YEAR, selectedYear);
    selectedDateCalendar.set(Calendar.MONTH, selectedMonth);
    selectedDateCalendar.set(Calendar.DAY_OF_MONTH, selectedDayOfMonth);
    selectedDateCalendar.set(Calendar.HOUR_OF_DAY, 0);
    selectedDateCalendar.set(Calendar.MINUTE, 0);
    selectedDateCalendar.set(Calendar.SECOND, 0);
    selectedDateCalendar.set(Calendar.MILLISECOND, 0);

    if (selectedDateCalendar.getTime().before(minDateCalendar.getTime()))
      return "IS_LESS_THAN_MIN";

    if (selectedDateCalendar.getTime().after(maxDateCalendar.getTime()))
      return "IS_MORE_THAN_MAX";

    return "IS_BETWEEN_RANGE";
  }

PS: Добавление решения моего собственного вопроса - просто выход, если кто-то сталкивается с той же проблемой.

...