Datepicker未更新

时间:2013-12-03 02:45:40

标签: android datepicker

所以这里有些奇怪。

我有3个元素:EditTextSpinnerDatePicker。每当TextEdit中的值发生更改或选择Spinner值时,DatePicker都会相应更新。具体来说,Spinner可以选择月/周/天,因此DatePicker会根据EditText中的值更新X周/天/月。很简单......但我得到了一些非常奇怪的行为。

我有一个关于微调器的听众在任何更改时调用静态updateDatePicker()方法的文本字段。在文本字段更改时一切正常但对于微调器,每当我从索引0更新到索引2(从几个月到几天)时,日期选择器都不会更新 - 它保持相同的日期。奇怪的是,如果我从0到1到2,或从2到1到0,它可以工作,任何到/从索引1的转换都有效。我没有检查任何特殊的转换,updateDatePicker()方法可以在微调器的selectedIndexPosition上执行切换操作并且相应地工作。

我知道实际计算是正确的,因为我可以打印出我想要的新日期,但它只是没有更新的日期选择器。这是我的Logcat和生成logcat的gode(在调用方法时调用额外的“swapped”标记):

    Log.d("Updated Retest Date:", newDate.get(Calendar.YEAR) + " " + (newDate.get(Calendar.MONTH)-1) + " " + newDate.get(Calendar.DATE));
    // Month is starting from 0 hence -1 on the Month
    datePicker.updateDate(newDate.get(Calendar.YEAR), (newDate.get(Calendar.MONTH)-1), newDate.get(Calendar.DATE));
    Log.d("New Date:", datePicker.getYear() + " " + datePicker.getMonth() + " " + datePicker.getDayOfMonth());

12-03 13:42:56.240: D/DASDSAD(22299): swapped
12-03 13:42:56.240: D/Item Position Spinner(22299): 0
12-03 13:42:56.240: D/Updated Retest Date:(22299): 2013 9 8
12-03 13:42:56.250: D/New Date:(22299): 2013 9 8
12-03 13:43:00.140: D/DASDSAD(22299): swapped
12-03 13:43:00.140: D/Item Position Spinner(22299): 1
12-03 13:43:00.140: D/Updated Retest Date:(22299): 2013 8 15
12-03 13:43:00.160: D/New Date:(22299): 2013 8 15
12-03 13:43:01.985: D/DASDSAD(22299): swapped
12-03 13:43:01.990: D/Item Position Spinner(22299): 2
12-03 13:43:01.990: D/Updated Retest Date:(22299): 2013 8 9
12-03 13:43:02.000: D/New Date:(22299): 2013 8 9
12-03 13:43:03.625: D/DASDSAD(22299): swapped
12-03 13:43:03.625: D/Item Position Spinner(22299): 1
12-03 13:43:03.625: D/Updated Retest Date:(22299): 2013 8 15
12-03 13:43:03.630: D/New Date:(22299): 2013 8 15
12-03 13:43:04.900: D/DASDSAD(22299): swapped
12-03 13:43:04.905: D/Item Position Spinner(22299): 0
12-03 13:43:04.905: D/Updated Retest Date:(22299): 2013 9 8
12-03 13:43:04.915: D/New Date:(22299): 2013 9 8
12-03 13:43:06.255: D/DASDSAD(22299): swapped
12-03 13:43:06.260: D/Item Position Spinner(22299): 2
12-03 13:43:06.260: D/Updated Retest Date:(22299): 2013 8 9
12-03 13:43:06.260: D/New Date:(22299): 2013 9 8

正如你在最后3行看到的那样,我将2013 8 9作为新日期,用它更新datepicker并查询datepicker的新日期,但它仍然给我2013年9月8日。

谢谢,我一直在疯狂。

2 个答案:

答案 0 :(得分:1)

所以......我设法解决了这个问题,但是解决方案不是很优雅也没有意义。对于遇到类似问题的人,我会把我的解决方案留在这里。

final int newMonth = newDate.get(Calendar.MONTH);
        Log.d("new month:", newMonth + "");

        // weird workaround some bug. LEAVE IT.
        datePicker.updateDate(newDate.get(Calendar.YEAR), newMonth , newDate.get(Calendar.DATE));
        datePicker.updateDate(newDate.get(Calendar.YEAR), datePicker.getMonth()-1,  newDate.get(Calendar.DATE));

基本上,更新日期不起作用。所以我不得不将其设置为更新两次,第二次使用它的“更新”值。我认为这是一些奇怪的记忆事情......为什么只适用于我之前说过的某些转变,谁知道呢。 耸肩

答案 1 :(得分:0)

您不应该使用newDate.get(Calendar.DATE)来获取当天。您可以通过将Calendar.DATE更改为Calendar.DAY_OF_MONTH来摆脱这种难看的修复。

datePicker.updateDate(newDate.get(Calendar.YEAR), newMonth, newDate.get(Calendar.DAY_OF_MONTH));