Java 在Android DatePickerDialog中使用“今天”按钮更新日期,而不关闭对话框
我想要一个带有“今天”按钮的日期选择器对话框。如果我单击“今天”按钮,它应该将日期选择器重置为当前日期,而不关闭对话框 我有以下代码:Java 在Android DatePickerDialog中使用“今天”按钮更新日期,而不关闭对话框,java,android,date,datepicker,datepickerdialog,Java,Android,Date,Datepicker,Datepickerdialog,我想要一个带有“今天”按钮的日期选择器对话框。如果我单击“今天”按钮,它应该将日期选择器重置为当前日期,而不关闭对话框 我有以下代码: Calendar today = Calendar.getInstance(); DatePickerDialog datePickerDialog = new DatePickerDialog(context, R.style.MyDialogStyle, date, myCalendar.get(Calendar.YEAR), myCalendar.get
Calendar today = Calendar.getInstance();
DatePickerDialog datePickerDialog = new DatePickerDialog(context, R.style.MyDialogStyle, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
datePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "Today", (dialog, which) -> {
datePickerDialog.updateDate(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH));
});
datePickerDialog.show();
预期行为:将datepicker的日期设置为当前日期,而不关闭对话框
实际行为:对话框关闭,日期不变
我还尝试了新的DatePickerDialog…,和
datePickerDialog.getDatePicker().init(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH), null);
但它仍然不起作用,只会关闭对话框。
我错过了什么
有没有一种方法可以在不关闭对话框的情况下以编程方式更新datepicker的日期?默认情况下,单击按钮调用也可以关闭DatePickerDialog。它也适用于DialogInterface.BUTTON\u用于“今天”的中性按钮 避免这种情况的最简单方法可能是重写DatePickerDialog.Disclose方法,并在单击“今天”按钮时跳过调用super.Disclose。 这是我在Kotlin中的工作代码,我今天使用DatePickerDialog的按钮也是出于同样的目的。我使用skipDismiss标志来知道何时跳过解雇
val datePickerDialog = object : DatePickerDialog(
this@MainActivity,
settings.currentTheme,
DatePickerDialog.OnDateSetListener { _, chosenYear, chosenMonth, dayOfMonth ->
calendar.set(Calendar.YEAR, chosenYear)
calendar.set(Calendar.MONTH, chosenMonth)
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
text_view_chosen_date.text = SimpleDateFormat("dd/MM/yyyy", Locale.US).format(calendar.time)
},
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH)
) {
override fun dismiss() {
if (!skipDismiss) {
super.dismiss()
} else {
skipDismiss = false
}
}
}
当然,“Today”按钮侦听器在调用时应该将skipDismiss标志设置为true。以下是我的代码:
datePickerDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "Today") { dialog, which ->
val today = Calendar.getInstance()
(dialog as DatePickerDialog).updateDate(
today.get(Calendar.YEAR),
today.get(Calendar.MONTH),
today.get(Calendar.DAY_OF_MONTH)
)
skipDismiss = true;
}
这和预期的一样,甚至更好,因为我不必维护布尔值,只需通过中立按钮侦听器将其设置为true即可。非常感谢