我处于一种特殊情况,我必须根据DatePicker
的所选元素更改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
,当我再次尝试更改最小日期时更改问题(更改最大日期工作)。它将保持我先设定的值。我在想这是一个错误。我在这里做错了吗?有解决方法吗?。
答案 0 :(得分:31)
这是因为方法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());
它对我有用。
答案 1 :(得分:2)
如上所述,您可以在实际更改值之前调用它们来绕过检查:
setMinDate(0);
setMaxDate(Long.MAX_VALUE);
如果您希望重置最小值或最大值为默认值,则可以使用以下值:
setMinDate(-2208902400000L); // Jan 1, 1900
setMaxDate(4102531200000L); // Jan 1, 2100
答案 2 :(得分:0)
首先根据你的dateobject
将setMinDate更新为0然后再将setMinDate更新mPicker.setMinDate(0);
mPicker.setMinDate(datepickerObject.getTimeInMillis());
答案 3 :(得分:0)
mPicker.setMinDate(0);
对我不起作用。
尝试重新初始化选择器。
mPicker = new DatePickerDialog(..)