我的应用中有一个datePicker对话框。我选择日期时工作正常。但是,如果在对话框中我更改日期然后按取消,则原始edittext保持不变,但日期选择器仍然具有取消之前的日期。我想确保每次进入日期选择器时,它都会从EditText设置日期。我的代码如下。
onCreate()方法
// Date Listener
fdEtDate.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
showDialog(DATE_DIALOG_ID);
return false;
}
});
进一步了解活动
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this,
dateSetListener,
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE));
case STD_DIALOG_ID:
return new TimePickerDialog(this,
stdSetListener,
stdHH, stdMM,
true);
case STA_DIALOG_ID:
return new TimePickerDialog(this,
staSetListener,
staHH, staMM,
true);
}
return null;
}
// the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener dateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, monthOfYear);
cal.set(Calendar.DATE, dayOfMonth);
updateDisplay();
}
};
// updates the date in the TextView
private void updateDisplay() {
fdEtDate.setText(
new StringBuilder()
.append(Utils.pad(cal.get(Calendar.DATE))).append(Const.SQL_DATE_SEP)
.append(Utils.pad(cal.get(Calendar.MONTH)+1)).append(Const.SQL_DATE_SEP)
.append(cal.get(Calendar.YEAR)));
fdEtStd.setText(
new StringBuilder()
.append(Utils.pad(stdHH)).append(Const.SQL_TIME_SEP)
.append(Utils.pad(stdMM)));
fdEtSta.setText(
new StringBuilder()
.append(Utils.pad(staHH)).append(Const.SQL_TIME_SEP)
.append(Utils.pad(staMM)));
}
似乎每次都会创建一个新的Dialog,那么为什么每次都没有使用fdEtDate(EditText)中的Date进行初始化
提前致谢
答案 0 :(得分:8)
每次显示对话框时,都应使用 onPrepareDialog 设置初始日期。
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
switch (id) {
case START_DATE_DIALOG_ID:
((DatePickerDialog) dialog).updateDate(
mCalendar.get(Calendar.YEAR),
mCalendar.get(Calendar.MONTH),
mCalendar.get(Calendar.DAY_OF_MONTH))
}
}
只有在第一次显示对话框时才会创建对话框,除非您使用removeDialog()明确销毁它,否则将重复使用该对话框。
如果使用onCreateDialog(int)来管理对话框的状态(如上一节所述),那么每次关闭对话框时,Activity都会保留Dialog对象的状态。如果您决定不再需要此对象,或者清除状态很重要,那么您应该调用removeDialog(int)。这将删除对象的任何内部引用,如果对话框显示,它将忽略它
答案 1 :(得分:0)
这可能是因为您在Calendar
中更改了onDateSet
对象的值。尝试通过向LogCat添加一些输出来验证方法何时被调用,例如Log.e( "MyTag", "onDateSet was called!" );
。然后试验一下,看看它何时被召唤。
如果是这种情况,并且在您没有预料到时调用onDateSet
,则应更改设置日历的时间。
答案 2 :(得分:0)
这很简单。
您可以使用以下方法重置日历
sc_X = StandardScaler()
通过这种方式,它非常容易并且完美地工作。
答案 3 :(得分:0)
要在取消时重置日期选择器,请点击:
onDismissListner
onDismissListener
内,调用updateData
方法示例:
datePicker.setOnDismissListener((dialog) -> {
datePicker.updateData(Year, Month, Date);
}
注意:
您可能以为用户单击Ok
会导致此代码出现问题。理想情况下不会。在updateData
中呼叫onDateSet
时,不会有任何问题。