首页 > 解决方案 > 在日期选择器(Android)中按年份导航时可以选择超出最大日期

问题描述

当我按年份导航时,我可以选择超过 MAX 日期的日期。

要求:我应该允许用户在 datepicker 中选择今天的日期加上 365 天。所以最小日期 = 今天,最大日期 = 今天加上 364

问题:按年份导航时能够选择超出最大日期

重现问题的步骤:

  1. 选择了今天的日期(例如:2019 年 10 月 25 日)
  2. 选择距今天 5 天的日期(例如:2019 年 10 月 30 日)
  3. 选择年份并转到下一年(例如:2020)
  4. 您将看到 24-oct-2020 被选中,因为那是我们的 MAX 日期
  5. 但是当您单击确定时,选择的 onDate 将为您提供一个超出最大日期的日期(例如:2020 年 10 月 30 日)
private void showDatePicker(Calendar selectedDate) {
        datePickerDialog = new DatePickerDialog(MainActivity.this,
                new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int day) {
                        MainActivity.this.onDateSet(year, month, day);
                    }
                },
                selectedDate.get(YEAR),
                selectedDate.get(MONTH),
                selectedDate.get(DAY_OF_MONTH));
        Calendar today = Calendar.getInstance();
        datePickerDialog.getDatePicker().setMinDate(today.getTimeInMillis() - 1000);
        today.add(DATE, 365);
        datePickerDialog.getDatePicker().setMaxDate(today.getTimeInMillis());

        datePickerDialog.setButton(BUTTON_NEGATIVE, "ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                datePickerDialog.dismiss();
            }
        });
        datePickerDialog.show();
    }

    public void onDateSet(int year, int month, int day) {
        String date = String.valueOf(year).concat("-").concat(String.valueOf(month).concat("-").concat(String.valueOf(day)));
        btnDate.setText(date);
    }

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

标签: androiddatepicker

解决方案


推荐阅读