棒棒糖日历视图日期选取器不调用 OnDateChanged() 方法



我正在使用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 处于微调器模式,则 OnDateChanged(( 确实会被调用并且 mDate 会更改。在早期版本的 Android 下,OnDateChanged(( 被调用,mDate 在两个版本的 DatePicker 中被更改。

有没有办法让 5.0 中的 CalendarView DatePicker 调用 OnDateChanged((?如果做不到这一点,当日期选择器处于日历视图模式时,我还能如何从日期选择器中检索更改的日期?

我面临同样的问题,事情是onDateChange((和onTimeSet((侦听器,DatePicker和TimePicker的侦听器在带有棒棒糖更新的Nexus设备中没有调用。

原因是在结点设备中,因为时钟应用程序已更新,因此侦听器无法正常工作。

解决方法是,一旦对话框关闭,您需要创建自己的侦听器并使用日期选取器 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;
}

在 XML 布局中设置:

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

使用"android:spinnersDisplay="false",你告诉它不要显示微调器。但它将调用"onDateChanged"方法。

最新更新