在DatePicker
,DataChanged
当我选择星期六或星期日的周末时,我正在以编程方式将日期更改为即将到来的星期一/星期二,使用view.setMinDate(expectedDay)
. 在初始按下 2 或 3 次时,它可以正常工作。通过连续按 3 次或在日期选择器中随机单击任意日期,同一天(星期六/星期日)被选中,这不应该发生,它应该以编程方式更改日期。通过逻辑,如果view.setMinDate()
再次调用案例,它会达到预期,它是在同一天,而不是以编程方式导航到预期的日期。
tvStartDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
DatePickerDialog datePickerDialogFromDate = new DatePickerDialog(getContext(), R.style.datePickerTheme, fromDateListner, fromDateCalendar
.get(Calendar.YEAR), fromDateCalendar.get(Calendar.MONTH),
fromDateCalendar.get(Calendar.DAY_OF_MONTH)) {
@Override
public void onDateChanged(@NonNull DatePicker view, int year, int month, int dayOfMonth) {
//super.onDateChanged(view, year, month, dayOfMonth);
// Calendar newDate = Calendar.getInstance();
testCalendar.set(year, month, dayOfMonth);
Date choosenDate = testCalendar.getTime();
String dayOfTheWeek = new SimpleDateFormat("EEEE").format(choosenDate);
Log.v("Selected Day of Week >>>>", dayOfTheWeek);
try {
if (dayOfTheWeek.equalsIgnoreCase("THURSDAY")) {
Log.v("Day of Week >>>>THURSDAY", "Should be Monday");
view.setMinDate(testCalendar.getTimeInMillis() + 4 * 24 * 60 * 60 * 1000);
} else if (dayOfTheWeek.equalsIgnoreCase("FRIDAY")) {
Log.v("Day of Week >>>>FRIDAY", "Should be Tuesday");
view.setMinDate(testCalendar.getTimeInMillis() + 4 * 24 * 60 * 60 * 1000);
} else if (dayOfTheWeek.equalsIgnoreCase("SATURDAY")) {
Log.v("Day of Week >>>>SATURDAY", "Should be Tuesday");
view.setMinDate(testCalendar.getTimeInMillis() + 3 * 24 * 60 * 60 * 1000);
} else if (dayOfTheWeek.equalsIgnoreCase("SUNDAY")) {
Log.v("Day of Week >>>>SUNDAY", "Should be Tuesday");
view.setMinDate(testCalendar.getTimeInMillis() + 2 * 24 * 60 * 60 * 1000);
} else {
view.setMinDate(testCalendar.getTimeInMillis());
}
view.invalidate();
} catch (Exception ex) {
Log.v("Exception in getting Day of Week>>", ex.getMessage());
}
}
};
datePickerDialogFromDate.getDatePicker().setMinDate(System.currentTimeMillis() + Integer.parseInt(mReservationIntvl) * 24 * 60 * 60 * 1000);
datePickerDialogFromDate.show();
});
这是我的代码问题还是有任何解决方法?我尝试使用 datepicker.getMin() 从 datepicker 获取日期
public void updateDaysInDatePickerView(final DatePicker datePickerView, int noOfDays, Date date) {
try {
long NO_OF_DAYS_IN_MILLISECS = noOfDays * 24 * 60 * 60 * 1000;
long pushed_date = NO_OF_DAYS_IN_MILLISECS + date.getTime();
datePickerView.setMinDate(pushed_date);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
datePickerView.invalidate();
Calendar takenCalendar = Calendar.getInstance();
takenCalendar.setTimeInMillis(datePickerView.getMinDate());
Log.v("Day is>>>", "" + takenCalendar.get(Calendar.DATE));
Log.v("Month is>>>", "" + takenCalendar.get(Calendar.MONTH));
Log.v("Year is>>>", "" + takenCalendar.get(Calendar.YEAR));
}
});
} catch (Exception e) {
Log.d("Exception is this updateDaysInDatePickerView>>>", e.getMessage());
}
}
日期显示为星期一不在 UI 中没有更新,我尝试使视图无效,它没有更新。
我在 redmi note 5 pro(8.0) 中尝试过,它按预期工作,在三星 S6 edge 和 A2Max,(7.1 和 7.1.1)我们遇到了这个问题,我不确定这个问题是特定设备还是操作系统具体不确定。