据我所知,Jelly Beans 之前的版本在使用TimePickerDialogSet时具有和按钮。果冻豆只有按钮。CancelDone
我可以离开Done按钮,并可以通过在对话框外部单击来关闭对话框,但onTimeSetListener
如果按下Done或在对话框之外,我会被调用。
所以我发现了这个 stackoverflow 问题,它描述了使用DatePickerDialog时存在一个错误。要使用DatePickerDialog解决问题,在初始化时我必须设置onDateSetListener
to null
,并实现我自己的按钮来处理BUTTON_POSITIVE
(Set) 和BUTTON_NEGATIVE
(Cancel) onClick 方法。这很好,因为当按钮Set 被调用时,我可以像这样访问DatePicker值
int yearPicked = dateDlg.getDatePicker().getYear();
int monthPicked = dateDlg.getDatePicker().getMonth();
int dayPicked = dateDlg.getDatePicker().getDayOfMonth();
所以没有必要使用onDateSetListener
,但如果我愿意,它会在按下 Set 或 Cancel 时再次调用。
我尝试以相同的方式使用TimePickerDialog,但问题是,在BUTTON_POSITIVE
onClick 方法中,我无法像以前一样访问小时和分钟值,因为TimePickerDialog不提供TimePicker,因为DatePickerDialog提供了DatePicker。如果我再次使用onTimeSetListener
,它会通过按下任何东西来调用。
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
final TimePickerDialog timeDlg = new TimePickerDialog(PreferencesActivity.this, null, hour, min, true);
// Make the Set button
timeDlg.setButton(DialogInterface.BUTTON_POSITIVE, "Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
// CANNOT ACCES THE VALUES
Toast.makeText(PreferencesActivity.this, "Set", Toast.LENGTH_SHORT).show();
}
}
});
// Set the Cancel button
timeDlg.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
Toast.makeText(PreferencesActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
}
}
});
timeDlg.show();