【问题标题】:Set minimum date in date picker selected from another date picker在从另一个日期选择器中选择的日期选择器中设置最小日期
【发布时间】:2015-12-31 10:53:22
【问题描述】:

我有两个日期选择器,一个是到达日期,另一个是出发日期。 我想要的是当用户打开出发日期选择器时,它应该在此日期选择器对话框中将 +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();

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

提前感谢。

【问题讨论】:

  • 在设置为min之前,您能否记录arivalDayarivalMontharivalYear
  • 另外 min.setDate(arivalDay) 可能不正确。它应该类似于 setDay 而不是 date。

标签: android datepicker mindate


【解决方案1】:

您可能为arivalDayarivalMontharivalYear 分配了错误的值。

在您的到达日期选择器中,检查您的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) 代替。

【讨论】:

    【解决方案2】:

    对于出发最小日期您设置的与到达日期相同。 而不是

    min.setDate(arivalDay);
    

    试试这个

    min.setDate(arivalDay +1);
    

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

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

    应该是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多