我使用两个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);
}