棒棒糖日历视图DatePicker不会调用OnDateChanged()方法

时间:2014-12-10 17:41:42

标签: android datepicker android-5.0-lollipop calendarview

我正在使用DatePicker并发现在Android 5.0下,即使选择了新日期,它也不会在CalendarView模式下调用其OnDateChangedListener中的OnDateChanged()方法。如果是android:datePickerMode =" spinner"在DatePicker的xml标记中设置,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);
       }
  });

在我的应用程序中,onDateChanged()没有被调用,如果DatePicker在Lollipop下处于CalendarView模式,mDate不会被更改,但OnDateChanged()会被调用,如果DatePicker,mDate会改变处于Spinners模式。在早期版本的Android中,调用OnDateChanged()并在两个版本的DatePicker中更改mDate。

有没有办法让5.0中的CalendarView DatePicker调用OnDateChanged()?如果不这样做,我怎样才能在CalendarPicker的CalendarView模式下从DatePicker中检索更改日期?

2 个答案:

答案 0 :(得分:7)

我面临同样的问题,并且在具有棒棒糖更新的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;
}

答案 1 :(得分:0)

在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'方法。