Я работаю с DatePicker и обнаружил, что в Android 5.0 он не будет вызывать метод OnDateChanged() в своем OnDateChangedListener, когда он находится в режиме CalendarView, даже если была выбрана новая дата. Если android:datePickerMode="spinner" установлен в xml-теге DatePicker, DatePicker будет отображаться как счетчик и будет вызывать OnDateChanged() при выборе новой даты. В более ранних версиях Android DatePicker вызывает OnDateChanged() при выборе новой даты в версиях CalendarView и Spinners. Вот соответствующий код:
@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);
}
});
В моем приложении onDateChanged() не вызывается, и mDate не изменяется, если DatePicker находится в режиме CalendarView под Lollipop, но вызывается OnDateChanged(), и mDate действительно изменяется, если DatePicker находится в режиме Spinners. В более ранних версиях Android вызывается OnDateChanged(), и mDate изменяется в обеих версиях DatePicker.
Есть ли способ заставить CalendarView DatePicker в 5.0 вызывать OnDateChanged()? В противном случае, как еще я могу получить измененную дату из DatePicker, когда он находится в режиме CalendarView?