【问题标题】:Date Picker - Change Selected Date Android日期选择器 - 更改所选日期 Android
【发布时间】:2019-02-12 13:39:59
【问题描述】:

当今天的日期是 2019 年 2 月 12 日时,我使用了日期选择器并将最大日期设置为 2020 年 2 月 11 日。

我在点击日期选择器顶部的“年份”时直接更改年份时遇到问题。 当日期选择器在当前日期(今天的日期:2019 年 2 月 12 日)初始化时,如果我将年份更改为 2020 年 2 月,日期选择器会显示 2020 年 2 月 12 日作为标题,但日历视图上的选定日期是选定的 2 月 11 日。

见下图::

img 1 : 在日期选择器上初始化为今天的日期

img 2 : 不换日,换年

img 3 : 标题为 2020 年 2 月 12 日。但由于最大日期是 2020 年 2 月 11 日。在日历上选择了 11 日。 此外,点击确定后,将获得 2020 年 2 月 12 日。

我想删除此选择,或者只是将最大日期设为已选择 年份变化。

【问题讨论】:

  • 基于零索引。减一。通常这也会发生在当月,尽管可能会发生一些更愚蠢的事情。

标签: android android-studio datepicker android-datepicker datepickerdialog


【解决方案1】:

经过多次尝试和谷歌搜索,终于找到了上面的解决方案:

        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:如果有人面临同样的问题,将解决方案添加到我自己的问题中只是一种出路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多