В 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 с помощью datepicker.getMin ()
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());
}
}
Дата отображается, поскольку понедельник не в пользовательском интерфейсе не обновляется, я пытался сделать недействительным представление, оно не обновляется.
Я пытался в Redmi Note 5 Pro (8,0), он работает как положено, В Samsung S6 Edge и A2Max, (7.1 и 7.1.1), мы получаем эту проблему, я не уверен, что эта проблема является устройством в качестве конкретногоили конкретная ОС не уверен.