【问题标题】:getDatePicker().setMinDate of DatePickerDialog does not workDatePickerDialog 的 getDatePicker().setMinDate 不起作用
【发布时间】:2016-01-29 14:42:37
【问题描述】:

我希望 DatePickerDialog 不显示当前日期之前的日期。我正在使用setMinDate(long l) 方法。但它不起作用。

我使用一个内部类来设置 minDate:

public static class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {
    DatePickerDialog datePickerDialog;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);

        String s = month + day + year+"";
        datePickerDialog = new DatePickerDialog(getActivity(),this,year,month,day);
        datePickerDialog.getDatePicker().setMinDate(Long.parseLong(s));

        // Create a new instance of DatePickerDialog and return it
            return  datePickerDialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        SelectedDateView.setText(day+ (month + 1) + "-"  + "-" + year);

    }
}

这是显示它的方法:

public void showDatePickerDialog(View v) {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getActivity().getSupportFragmentManager(), "datePicker");
}

【问题讨论】:

  • Long.parseLong(s) 你认为这是做什么的?
  • @njzk2 将字符串转换为长字符串?
  • 是的,但是什么字符串,到什么日期? setMinDate 期待什么?
  • @njzk2 我不知道你想说什么。 s = month + day+ year 传递给 setMinDate
  • 如有疑问,请使用 rtfm。特别是setMinDate 的文档。您应该看到它期待一个特定的值,而不是您认为代表日期的值。

标签: android android-calendar android-datepicker


【解决方案1】:

setMinDate() 需要 unix 时间(自 1970 年 1 月 1 日 00:00:00 以来的毫秒数)。试试这样的:

long currentTime = new Date().getTime();
datePickerDialog.getDatePicker().setMinDate(currentTime);

希望这会有所帮助。

【讨论】:

  • 附带说明,unix 时间通常以秒为单位。 java使用毫秒,因为为什么不呢。
  • 嗨..我试过这个,但在棒棒糖中,日期选择器看起来像一个日历,今天之前的日期看起来被禁用但仍然可以选择。在选择日期时,我将其设置为TextView。即使看起来已禁用,我也可以设置今天之前的日期
  • 这似乎是 Android Lollipop 中的一个错误。检查所选日期在您的onDateSet 方法中是否有效,如果有效,则仅在您的文本视图中设置。
  • @spongeBob 回复晚了,但我刚刚遇到了这个问题。我也认为这是一个错误,尤其是 Android API 21(早期的 Lollipop)。之前和之后的 API 级别不受日历错误的影响。请注意,此错误也会影响setMaxDate()。按照@simon 说的做,并在使用之前添加一个冗余检查以验证选择的日期是否在范围内。
【解决方案2】:

试试这个:

long time= System.currentTimeMillis();
datePickerDialog.getDatePicker().setMinDate(time);

【讨论】:

  • 嗨..我试过这个,但在棒棒糖中,日期选择器看起来像一个日历,今天之前的日期看起来被禁用但仍然可以选择。在选择日期时,我将其设置为 TextView。即使看起来已禁用,我也可以设置今天之前的日期
【解决方案3】:

对于 23 岁以上的 sdks,您必须使用“System.currentTimeMillis()”而不是“cal.getTimeInMillis()”。

sdk < 23: datePickerStart.getDatePicker().setMinDate(System.currentTimeMillis())
sdk > 23: datePickerStart.getDatePicker().setMinDate(cal.getTimeInMillis())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    相关资源
    最近更新 更多