2

我有两个日期选择器,一个是到达日期,另一个是出发日期。我想要的是当用户打开出发日期选择器时,它应该在此日期选择器对话框中将 +1 天作为最短日期。

这是我在做什么

这是我的到达日期选择器

final Calendar c = Calendar.getInstance();
            arivalYear = c.get(Calendar.YEAR);
            arivalMonth = c.get(Calendar.MONTH);
            arivalDay = c.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog dpd = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            arivalDay = year;
                            arivalYear = monthOfYear;
                            arivalMonth = dayOfMonth;

                            arivalDateTV.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, arivalYear, arivalMonth, arivalDay);
            dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            dpd.show();

这是我的出发日期选择器

DatePickerDialog dpd = new DatePickerDialog(this,
                    new DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year,
                                              int monthOfYear, int dayOfMonth) {
                            departureYear = year;
                            departureMonth = monthOfYear;
                            departureDay = dayOfMonth;

                            departureDateTV.setText(dayOfMonth + "-"
                                    + (monthOfYear + 1) + "-" + year);

                        }
                    }, arivalYear, arivalMonth, arivalDay);
            Date min = new Date();
            min.setDate(arivalDay);
            min.setMonth(arivalMonth);
            min.setYear(arivalYear);

            dpd.getDatePicker().setMinDate(min.getDate());
            dpd.show();

但在这里我什至可以选择到达日期之前的日期。我做错了什么。

提前谢谢。

4

2 回答 2

1

arivalDay您可能为,arivalMonth和分配了错误的值arivalYear

在您的到达日期选择器中,检查您的onDateSet()方法。

以下行可能不正确(您将选定的年份分配给arivalDay,将选定的月份分配给arivalYear,并将选定的日期分配给arivalMonth)。

arivalDay = year;
arivalYear = monthOfYear;
arivalMonth = dayOfMonth;

应该:

arivalDay = dayOfMonth;
arivalYear = year;
arivalMonth = monthOfYear;

setDate(int day)已弃用。

此方法在 API 级别 1 中已弃用。请改用 Calendar.set(Calendar.DATE, day)。

于 2015-12-31T11:07:32.960 回答
1

对于出发最小日期您设置的与到达日期相同。代替

min.setDate(arivalDay);

尝试这个

min.setDate(arivalDay +1);

并在到达侦听器中设置它而不是这个

arivalDay = year;
arivalYear = monthOfYear;
arivalMonth = dayOfMonth;

它应该是

arivalDay = dayOfMonth;
arivalYear = year;
arivalMonth = monthOfYear;
于 2015-12-31T11:20:39.900 回答