Lollipop CalenderView DatePicker не вызывает метод OnDateChanged()

Я работаю с DatePicker и обнаруживаю, что под Android 5.0 он не будет вызывать метод OnDateChanged() в OnDateChangedListener, когда он в режиме CalendarView, даже если выбрана новая дата. Если в теге DatePicker xml установлен параметр datePickerMode = "spinner", то 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?

Ответы

Ответ 1

Я сталкиваюсь с одной и той же проблемой, и то, что происходит с onDateChange() и onTimeSet(), для DatePicker и TimePicker не вызывается в устройствах Nexus с обновлением lollipop.

Причина в устройствах nexus, так как приложение часов обновлено, слушатели не работают.

Работа после того, как диалог отклоняется, вам нужно создать собственный слушатель и установить значения в объекте календаря с помощью методов datepicker get() и передать календарь слушателю.

Простой пример кода

/**
 * Returns the calendar instance once the date and time is set.
 * @return
 */
public Calendar getDateTime() {
    mCalendar.set(datePicker.getYear(),
                  datePicker.getMonth(),
                  datePicker.getDayOfMonth(),
                  timePicker.getCurrentHour(),
                  timePicker.getCurrentMinute());
    return mCalendar;
}

Ответ 2

Установите это в свой Xml-Layout:

<DatePicker
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:datePickerMode="spinner"
        android:spinnersShown="false"
        android:id="@+id/datepicker_popupwindow"/>

С "android: spinnersShown =" false "" вы говорите ему, чтобы не показывать Spinner. Но он будет вызывать метод onDateChanged.