我有不同的問題。
我使用兩個輸入文本和兩個DatePickerDialog,我需要更新在第一個日期選擇器對話框中選擇的動作的第二個動作,但由於我在第一個對話框中選擇了第二個對話框中的minDate未更新。
參考:
SetMax date to 30 days in Android Date Picker
現在,正下方,啓動變量:
private static final int DEPARTUREDATE_DIALOG_ID = 0;
private static final int RETURNDATE_DIALOG_ID = 1;
private long mMinReturnDate;
private int year_x, month_x, day_x;
的正下方,默認值和第一日期選擇器對話框中的minDate:
// onCreate setValues() method.
DateFormat dateFormat = new SimpleDateFormat("EE, dd MMM yyyy", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
year_x = calendar.get(Calendar.YEAR);
month_x = calendar.get(Calendar.MONTH);
day_x = calendar.get(Calendar.DAY_OF_MONTH);
String departureDatetime = dateFormat.format(calendar.getTime());
mDepartureDate.setText(departureDatetime);
// Determine min date to select in calendar.
mMinReturnDate = calendar.getTimeInMillis();
calendar.add(Calendar.DATE, 1);
String returnDatetime = dateFormat.format(calendar.getTime());
mReturnDate.setText(returnDatetime);
onCreateDialog方法:
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);
if (id == DEPARTUREDATE_DIALOG_ID)
return showCalendarFromDepartureDate(mContext, year_x, month_x, day_x);
else if (id == RETURNDATE_DIALOG_ID)
return showCalendarFromReturnDate(mContext, year_x, month_x, day_x);
return null;
}
正下方showCalendarFromDepartureDate
方法:
在這裏,我做了代碼更新第二日期選擇器對話框的minDate曾經是我選擇的第一個對話框。
/**
* Show calendar from departure date.
*
* @param context
* @param year
* @param month
* @param day
* @return
*/
protected DatePickerDialog showCalendarFromDepartureDate(Context context, int year, int month, int day) {
Calendar now = Calendar.getInstance();
DatePickerDialog dialog = new DatePickerDialog(context, departureDatePickerLstner, year, month, day);
dialog.getDatePicker().setMinDate(now.getTimeInMillis());
return dialog;
}
private DatePickerDialog.OnDateSetListener departureDatePickerLstner = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
DateFormat dateFormat = new SimpleDateFormat("EE, dd MMM yyyy", Locale.getDefault());
year_x = year;
month_x = month;
day_x = dayOfMonth;
Calendar newDate = Calendar.getInstance();
newDate.set(year_x, month_x, day_x);
// Update minDate to date of return.
mMinReturnDate = newDate.getTimeInMillis();
String departureDatetime = dateFormat.format(newDate.getTime());
mDepartureDate.setText(departureDatetime);
newDate.add(Calendar.DATE, 1);
String returnDatetime = dateFormat.format(newDate.getTime());
mReturnDate.setText(returnDatetime);
}
};
的問題是我第二次更新的第一個日曆日期,第二的minDate
總是很舊日期第一次我選擇了它。
/**
* Show calendar from return date.
*
* @param context
* @param year
* @param month
* @param day
* @return
*/
protected DatePickerDialog showCalendarFromReturnDate(Context context, int year, int month, int day) {
DatePickerDialog dialog = new DatePickerDialog(context, returnDatePickerLstner, year, month, day);
dialog.getDatePicker().setMinDate(mMinReturnDate);
return dialog;
}
private DatePickerDialog.OnDateSetListener returnDatePickerLstner = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
DateFormat dateFormat = new SimpleDateFormat("EE, dd MMM yyyy", Locale.getDefault());
year_x = year;
month_x = month;
day_x = dayOfMonth;
Calendar newDate = Calendar.getInstance();
newDate.set(year_x, month_x, day_x);
String returnDatetime = dateFormat.format(newDate.getTime());
mReturnDate.setText(returnDatetime);
}
};
第一個對話框中選擇日期
![Select date in the first dialog](https://i.stack.imgur.com/3dadM.png)
選擇日期在第二個對話框
在
![now select date in the second dialog](https://i.stack.imgur.com/pjTHG.png)
更新日期第一個對話框
![enter image description here](https://i.stack.imgur.com/kXvWR.png)
在這裏,在第二個對話框
![date of the second dialog](https://i.stack.imgur.com/1PWTd.png)
日期的bug。編輯:我懷疑DatePickerDialog是不是每次我點擊輸入時創建的,所以我決定調試第二個日期選擇器對話框showCalendarFromReturnDate()
的方法,它並不總是在這裏發生。
在我的最後一個方法onDataSet()
辦法,因爲在開始對話,也沒有通過該方法去之前刪除的對話框removeDialog (RETURNDATE_DIALOG_ID);
但即使如此,有時的minDate沒有設置添加第二個日期選擇器對話框的聽衆。
我不知道該怎麼做。
@Override
protected Dialog onCreateDialog(int id) {
super.onCreateDialog(id);
if (id == DEPARTUREDATE_DIALOG_ID)
return showCalendarFromDepartureDate(mContext, year_x, month_x, day_x);
else if (id == RETURNDATE_DIALOG_ID)
return showCalendarFromReturnDate(mContext, year_x, month_x, day_x);
return null;
}
...
protected DatePickerDialog showCalendarFromReturnDate(Context context, int year, int month, int day) {
Log.d(TAG, "==== DatePickerDialog from returnDate ====");
Log.d(TAG, "minDate is: " + mMinReturnDate);
Log.d(TAG, "year is: " + year);
Log.d(TAG, "month is: " + month);
Log.d(TAG, "day is: " + day);
DatePickerDialog dialog = new DatePickerDialog(context, returnDatePickerLstner, year, month, day);
dialog.getDatePicker().setMinDate(mMinReturnDate);
return dialog;
}
private DatePickerDialog.OnDateSetListener returnDatePickerLstner = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
DateFormat dateFormat = new SimpleDateFormat("EE, dd MMM yyyy", Locale.getDefault());
year_x = year;
month_x = month;
day_x = dayOfMonth;
Calendar newDate = Calendar.getInstance();
newDate.set(year_x, month_x, day_x);
String returnDatetime = dateFormat.format(newDate.getTime());
mReturnDate.setText(returnDatetime);
//@TODO: I try to resolve this bug with this but it doesn't always work.
removeDialog(RETURNDATE_DIALOG_ID);
}
};
發生了什麼傢伙?
是不是mayur的答案幫助你?這似乎很好的工作.. –
呃。必須使其動態..我的代碼是靜態的,我想使其動態,所以我通過的價值和限制將在兒童和嬰兒日曆設置 – Developer
忙於我的項目..抱歉..稍後會抓到你。 :/ –