Android 用于日期选择器的setMinDate(…)';第二次调用时无法工作

Android 用于日期选择器的setMinDate(…)';第二次调用时无法工作,android,date,time,android-ui,Android,Date,Time,Android Ui,我处于一种特殊情况下,我必须根据微调器的选定元素更改日期选择器的最小和最大日期。下面是我用来切换最小和最大日期的代码块 private void switchCalculationMethod(int method) { calculationMethod = method; switch (method) { case METHOD_1: datePicker.setMinDate(new LocalDate().minusWeeks(4

我处于一种特殊情况下,我必须根据
微调器的选定元素更改
日期选择器
的最小和最大日期。下面是我用来切换最小和最大日期的代码块

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。

之所以发生这种情况,是因为方法setMinDate()有check

 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());

它适合我。

首先将setMinDate更新为0,然后根据您的dateobject将setMinDate更新为0

mPicker.setMinDate(0)


mPicker.setMinDate(datepickerObject.getTimeInMillis())

如上所述,在实际更改值之前,可以通过调用这些函数绕过检查:

setMinDate(0);
setMaxDate(Long.MAX_VALUE);
如果要将最小值或最大值重置为默认值,可以使用以下值:

setMinDate(-2208902400000L);  // Jan 1, 1900
setMaxDate(4102531200000L);  // Jan 1, 2100
不适合我

尝试重新初始化选择器

mPicker = new DatePickerDialog(..)

您在第二个setMinDate上没有使用ToDateTimeAtStarToDay()的具体原因是什么?@Voidpaw None,编辑问题时出错。我现在正在使用一个自定义的方法。我只是想为了简单起见跳过那部分。更正。我不知道为什么会有那张支票,但这对我起了作用。一定是个实习生。我在别的地方分配了
DatePickerDialog
,为了改变主意,我不得不重新分配
DatePickerDialog
。如
mPicker=new DatePickerDialog(…………)
然后重置minDate和setMinDate@Nicolas的回答有助于重置。3.setMaxDate(Long.MAX_值);不建议使用-它将在内存不足的设备上引发内存不足异常。
mPicker = new DatePickerDialog(..)