DatepickerDialog未正确显示日期

时间:2016-12-30 13:19:28

标签: android android-datepicker android-date

我使用两个datePickerDialogs(Say x和y)来设置两个不同的日期。我使用两个单独的日历实例(Say xCal和yCal)设置不同的最大和最小日期。 xCal和yCal是静态变量。还有两个单独的onDateSetListeners(Say xListener和yListener)。

当我点击x datePickerDialog时,它会正确显示所有设置(最大和最小日期)。但是,当我单击y datePickerDialog时,它会显示x datePickerDialog的设置,反之亦然。

以下是示例代码:

protected Dialog onCreateDialog(int id) {
        if (id == 999) {
            DateFormat inputDF  = new SimpleDateFormat(AppConstants.DATE_FORMAT_MM_DD_YYYY_2);
            Date date1 = null;
            if(dateFlag.equalsIgnoreCase(flag1)){
                int lmYear, lmMonth, lmDay;
                try {

                    date1 = inputDF.parse(DateUtils.formatDate(
                            date, AppConstants.DATE_FORMAT_YYYY_MM_DD,
                            AppConstants.DATE_FORMAT_MM_DD_YYYY_2));

                            lCalendar.setTime(date1);
                            lmMonth = lCalendar.get(Calendar.MONTH);
                            lmDay = lCalendar.get(Calendar.DAY_OF_MONTH);
                            lmYear = lCalendar.get(Calendar.YEAR);

                    DatePickerDialog lDialog = new DatePickerDialog(this, lDateListener, lmYear, lmMonth, lmDay);
                    DatePicker lDatePicker = lDialog.getDatePicker();
                    Calendar calendar = Calendar.getInstance();
                    lDatePicker.setMaxDate(calendar.getTimeInMillis());
                    lDatePicker.setMinDate(DateUtils.getLMDMinDate());
                    return lDialog;
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }else if(dateFlag.equalsIgnoreCase(flag2)) {
                int ddYear, ddMonth, ddDay;
                if (userSession.get(date)!=null){
                    try {
                        date1 = inputDF.parse(userSession.get(date));
                        dCalendar.setTime(date1);
                        ddMonth = dCalendar.get(Calendar.MONTH);
                        ddDay = dCalendar.get(Calendar.DAY_OF_MONTH);
                        ddYear = dCalendar.get(Calendar.YEAR);

                        DatePickerDialog dDialog = new DatePickerDialog(this, dDateListener, ddYear, ddMonth, ddDay);
                        DatePicker dDatePicker = dDialog.getDatePicker();

                        dDatePicker .setMaxDate(DateUtils.getMaxDate(dCalendar));
                        dDatePicker .setMinDate(DateUtils.getMinDate(dCalendar));
                        return dDialog;
                    } catch (ParseException e) {
                        e.printStackTrace();

                        ddMonth = dCalendar.get(Calendar.MONTH);
                        ddDay = dCalendar.get(Calendar.DAY_OF_MONTH);
                        ddYear = dCalendar.get(Calendar.YEAR);

                        DatePickerDialog dDialogNew = new DatePickerDialog(this, dDateListener,ddYear, ddMonth, ddDay);
                        DatePicker dDatePicker = dDialogNew.getDatePicker();
                        dDatePicker .setMaxDate(DateUtils.getMaxDate(dCalendar));
                        dDatePicker .setMinDate(DateUtils.getMinDate(dCalendar));
                        return dDialogNew;
                    }

                } else {
                    ddMonth = dCalendar.get(Calendar.MONTH);
                    ddDay = dCalendar.get(Calendar.DAY_OF_MONTH);
                    ddYear = dCalendar.get(Calendar.YEAR);

                    DatePickerDialog dpDialog = new DatePickerDialog(this, dDateListener,ddYear, ddMonth, ddDay);
                    DatePicker datePicker = dpDialog.getDatePicker();
                    datePicker.setMaxDate(DateUtils.getMaxDate(dCalendar));
                    datePicker.setMinDate(DateUtils.getMinDate(dCalendar));
                    return dpDialog;
                }
            }
        }
        return null;
    }

更新 以下是onClickListener的代码片段,当我点击任何按钮时调用相同的方法:

public void setDate(View view) {
        if(view.getId()==R.id.date1_textView){
            dateFlag = flag1;
        }else {
            dateFlag = flag2;
        }
        showDialog(999);
    }

0 个答案:

没有答案
相关问题