0

DatePickerDataChanged当我选择星期六或星期日的周末时,我正在以编程方式将日期更改为即将到来的星期一/星期二,使用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)我们遇到了这个问题,我不确定这个问题是特定设备还是操作系统具体不确定。

4

0 回答 0