DatePickerObject.setMinDate () не работает в OnDataChanged () в Android во второй или третий раз - PullRequest
0 голосов
/ 16 октября 2018

В 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), мы получаем эту проблему, я не уверен, что эта проблема является устройством в качестве конкретногоили конкретная ОС не уверен.

...