我正在使用一个日期选取器,发现在Android 5.0下,当它处于日历视图模式时,即使选择了新的日期,它也不会在其OnDateChangedListener中调用OnDateChanged()方法。如果在datepicker的xml标记中设置了android:datepickerMode=“spinner”,则datepicker将显示为spinner s,并在选择新日期时调用ondateChanged()。在早期版本的Android中,当在CalendarView和Spinners版本中选择新日期时,日期选择器调用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下处于日历视图模式,则不会调用ondatechanged(),并且mdate也不会更改;但是,如果datepicker在spinners模式,则会调用ondatechanged(),mdate也会更改。在早期版本的Android下,调用OnDateChanged()并在两个版本的日期选取器中更改mdate。
是否有任何方法可以让CalendarView Datepicker在5.0中调用OnDateChanged()?如果失败了,我还能在日历视图模式下从日期选择器中检索更改的日期吗?

最佳答案

我也面临同样的问题,在Nexus设备中,没有用棒棒糖更新来调用datepicker和timepicker的ondatechange()和ontimeset()侦听器。
原因是在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;
}

07-28 12:38