Android Lollipop DatePicker 无法正常工作
Android Lollipop DatePicker not working properly
我 运行 我的应用程序低于 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());
}
}
};
我在几款 Samsung 和 Nexus 设备 运行 版本高于 Honeycomb 的设备上看到过这种情况,其中 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
}
我 运行 我的应用程序低于 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());
}
}
};
我在几款 Samsung 和 Nexus 设备 运行 版本高于 Honeycomb 的设备上看到过这种情况,其中 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
}