android - DatePicker 的 setMinDate(...) 在第二次调用时不起作用

标签 android date time android-ui

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

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() 方法有检查

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

它对我有用。

关于android - DatePicker 的 setMinDate(...) 在第二次调用时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616575/

相关文章:

android - Fabric Beta 和 APK 拆分

android - 在 Android 中获取给定周数的日期

perl - 是否有用于将秒数转换为英语的 CPAN 模块?

java - java中GMT解析的意外结果

Javascript 时间和工作日/周末 CSS 更改

android - 在布局绑定(bind)中使用属性资源 (?attr/)?

android - WorkManager 的定期工作请求不起作用

excel - 规范化 VBA 中关于时间的日期

php - PHP 中的时区

更新日期的 SQL 语句