我正在使用 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 中检索更改的日期?