【发布时间】:2015-02-09 00:39:17
【问题描述】:
我正在使用 DatePicker 并发现在 Android 5.0 下,即使选择了新日期,当它处于 CalendarView 模式时,它也不会在其 OnDateChangedListener 中调用 OnDateChanged() 方法。如果在 DatePicker 的 xml 标记中设置了 android:datePickerMode="spinner",则 DatePicker 将显示为微调器,并且它将在选择新日期时调用 OnDateChanged()。在早期版本的 Android 中,当在 CalendarView 和 Spinners 版本中选择新日期时,DatePicker 会调用 OnDateChanged()。以下是相关代码:
@SuppressLint("InflateParams")
View v = getActivity().getLayoutInflater().inflate(R.layout.dialog_date, null);
DatePicker datePicker = (DatePicker) v.findViewById(R.id.dialog_date_DatePicker);
datePicker.init(year, month, day, new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
//Translate year, month, day into a Date object using a calendar
mDate = new GregorianCalendar(year, month, day).getTime();
//Update argument to preserve selected value on rotation
getArguments().putSerializable(EXTRA_DATE, mDate);
}
});
在我的应用程序中,如果 DatePicker 在 Lollipop 下处于 CalendarView 模式,则不会调用 onDateChanged() 并且不会更改 mDate,但是如果 DatePicker 处于 Spinners 模式,则会调用 OnDateChanged() 并且会更改 mDate .在早期版本的 Android 中,在两个版本的 DatePicker 中都会调用 OnDateChanged() 并更改 mDate。
有没有办法让 5.0 中的 CalendarView DatePicker 调用 OnDateChanged()?否则,当 DatePicker 处于 CalendarView 模式时,我还能如何从 DatePicker 中检索更改的日期?
【问题讨论】:
-
这是一个框架错误,已在下一个版本中修复。不幸的是,我认为没有一种干净的方法可以解决它。
-
@alanv 我担心它会变成那样 8^( 不过,谢谢你的评论。现在我可以停止为此而苦恼了。
-
你现在能做的最好的可能就是将日期选择器模式设置为 XML 中的“微调器”。
-
@alanv 这就是我现在决定采取的路线。再次感谢。
-
将 AOSP 票证放在这里以供将来参考:code.google.com/p/android/issues/detail?id=147657
标签: android datepicker android-5.0-lollipop calendarview