我知道这已被问过很多次,但我找不到适合我的问题的答案。
所以我有一个活动,它有一个按钮,其中'文本是当前时间(访问活动的时间)。我可以单击按钮显示TimePickerDialog,我可以在其中更改时间,单击“设置”按钮,按钮将更新为新时间。到目前为止,这么好,非常基本。
我的问题是,如果我启动TimePicker,更改时间,单击取消按钮,然后再次启动TimePicker,显示的时间是我取消的时间,而不是启动它的按钮的原始时间。如果我取消TimePicker,我希望它忘记以前的任何数据。
这是我的代码:
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIME_DIALOG_ID:
recordTime = new TimePickerDialog(this,mTimeSetListener, mHour, mMinute, true);
recordTime.setOnCancelListener(new OnCancelListener(){
@Override
public void onCancel(DialogInterface arg0) {
final Calendar c = Calendar.getInstance();
mHour = c.get(Calendar.HOUR_OF_DAY);
mMinute = c.get(Calendar.MINUTE);
recordTime.dismiss();
}
});
recordTime.setOnDismissListener(new OnDismissListener(){
@Override
public void onDismiss(DialogInterface arg0) {
recordTime.cancel();
recordTime.dismiss();
}
});
return recordTime;
}
return null;
}
// the callback received when the user sets the time in the dialog
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
mHour = hourOfDay;
mMinute = minute;
updateTimeDisplay();
}
};
答案 0 :(得分:2)
如果我取消TimePicker,我希望它忘记以前的任何数据。
每次使用showDialog()
打开对话框时,它都会通过onPrepareDialog()
,只需在此处重置时间。如果用户点击Set
新时间已保存在mHour
和mMinute
中,如果对话框因任何原因被取消,则会恢复原始数据:
@Override
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
switch (id) {
case TIME_DIALOG_ID:
recordTime.updateTime(mHour, mMinute);
}
}
您也可以在OnCancelListener中轻松调用它:
recordTime.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
recordTime.updateTime(mHour, mMinute);
}
});
您的原始OnCancel和OnDismiss侦听器似乎也是多余的。你想和他们做什么?
如果用户点击onDismiss()
,Set
或使用后退按钮,您应该知道Cancel
已被调用。如果用户点击Set
您不希望调用onCancel()
方法onDismiss()
。不要将onCancel()
和onDismiss()
视为相同的方法。
答案 1 :(得分:0)
您永远不会重置日期。如果您使用onCancel
方法重置日期/时间,一切都应该正常。