17

我处于一种特殊情况,我必须DatePicker根据 a 的选定元素更改 的最小和最大日期Spinner。这是我用来切换最小和最大日期的代码块。

private void switchCalculationMethod(int method) {
    calculationMethod = method;
    switch (method) {
        case METHOD_1:
            datePicker.setMinDate(new LocalDate().minusWeeks(42).getMillis());
            datePicker.setMaxDate(new LocalDate().plusDays(1).getMillis() - 1);
            break;
        case METHOD_2:
            datePicker.setMinDate(new LocalDate().minusWeeks(2).getMillis()); // This don't work!!
            datePicker.setMaxDate(new LocalDate().plusWeeks(40).getMillis()); // This works!!!
            break;
    }
    datePicker.init(today.getYear(), today.getMonthOfYear() - 1,
            today.getDayOfMonth(), this);
}

因此,DatePicker第一次会正确设置,当我尝试再次更改最小日期时会出现问题(更改最大日期有效)。它将保持在我最初设置的值。我认为这是一个错误。我在这里做错了吗?有解决方法吗?

PS:我正在使用 Joda time api。

4

4 回答 4

37

发生这种情况是因为方法 setMinDate() 已检查

 if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)
                && mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR){
            return;
 }

简单的解决方法是首先设置不同年份的最小日期,例如

mPicker.setMinDate(0);

mPicker.setMinDate(new LocalDate().minusWeeks(2)
                                .toDateTimeAtStartOfDay().getMillis());

这个对我有用。

于 2013-11-01T07:40:42.480 回答
3

如上所述,您可以通过在实际更改值之前调用它们来绕过检查:

setMinDate(0);
setMaxDate(Long.MAX_VALUE);

如果要将最小值或最大值重置为其默认值,可以使用以下值:

setMinDate(-2208902400000L);  // Jan 1, 1900
setMaxDate(4102531200000L);  // Jan 1, 2100
于 2017-04-28T00:58:32.320 回答
0

首先根据您的日期对象将 setMinDate 更新为 0 然后 setMinDate

mPicker.setMinDate(0);

mPicker.setMinDate(datepickerObject.getTimeInMillis());

于 2016-11-29T11:22:46.707 回答
0
mPicker.setMinDate(0);

对我不起作用。

尝试重新初始化选择器。

mPicker = new DatePickerDialog(..)
于 2019-10-22T14:01:24.677 回答