Android Lollipop DatePicker无法正常工作

时间:2015-08-04 14:23:50

标签: android datepicker

我在5.0下运行我的应用程序并且工作正常,但是当我在设备上运行5.0+时,监听器不会验证。

  DatePicker.OnDateChangedListener listener = new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

                Date current = new Date(year, monthOfYear, dayOfMonth);

                if (current.getTime() < minDate.getTime()) {
                    view.updateDate(minDate.getYear(), minDate.getMonth(), minDate.getDate());
                }
            }
        };

1 个答案:

答案 0 :(得分:0)

我见过这种情况发生在几个运行大于Honeycomb的版本的三星和Nexus设备上,其中onDateSet / onDateChanged没有被调用(或甚至多次被调用)。作为一种解决方法,手动设置肯定动作的单击侦听器以触发您想要的方法效果非常好。

例如,假设您有DatePickerDialog dateDialog

if(android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB){ // Fix for some Samsung/Nexus devices not explicitly calling onDateSet
    dateDialog.setButton(DialogInterface.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener(){
        public void onClick(DialogInterface dialog, int which) {
            DatePicker datePicker = dateDialog.getDatePicker();
            listener.onDateChanged(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
        } 
    });     
}

您可能还想在onDateChanged()方法中添加一个检查,以确保在处理日期更改时实际显示日期选择器对话框,以防止在某些设备上调用它两次。例如

public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
    if(!view.isShown()) return;

    // Safe to handle the date
}