【问题标题】:setMinDate(...) for DatePicker doesn't work when invoked a second timeDatePicker 的 setMinDate(...) 在第二次调用时不起作用
【发布时间】:2013-10-27 09:35:19
【问题描述】:

我处于一种特殊情况,我必须根据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 上使用 toDateTimeAtStartOfDay() 的任何具体原因?
  • @Voidpaw 无,编辑问题时出错。我现在正在使用自定义方法。只是想为了简单起见我会跳过那部分。已更正。

标签: android date time android-ui


【解决方案1】:

这是因为 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());

它对我有用。

【讨论】:

  • 我不知道为什么会有支票,但这对我有用。一定是实习生。
  • 我在其他地方分配了DatePickerDialog,为了更改minDate,我不得不重新分配DatePickerDialog。像mPicker = new DatePickerDialog(.., ..., ...., ..) 然后重置 minDate 和 setMinDate。 @Nicolas 的回答对 reset.3 很有帮助。
【解决方案2】:

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

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

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

setMinDate(-2208902400000L);  // Jan 1, 1900
setMaxDate(4102531200000L);  // Jan 1, 2100

【讨论】:

  • setMaxDate(Long.MAX_VALUE);不推荐 - 它会在低内存设备上抛出内存不足异常。
【解决方案3】:

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

mPicker.setMinDate(0);

mPicker.setMinDate(datepickerObject.getTimeInMillis());

【讨论】:

    【解决方案4】:
    mPicker.setMinDate(0);
    

    对我不起作用。

    尝试重新初始化选择器。

    mPicker = new DatePickerDialog(..)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-15
      • 2016-03-30
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多