我想要一个带有“今天”按钮的日期选择器对话框。如果我单击“今天”按钮,它应该将日期选择器重置为当前日期,而不关闭对话框。
我有以下代码:
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();
预期行为:将日期选择器的日期设置为当前日期而不关闭对话框。
实际行为:对话框关闭,日期不变。
我还尝试了新的 DatePickerDialog(...),并且
datePickerDialog.getDatePicker().init(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_MONTH), null);
但它仍然不起作用,只是关闭了对话框。 我在这里缺少什么?
有没有一种方法可以在不关闭对话框的情况下以编程方式更新日期选择器的日期?
最佳答案
默认情况下,单击按钮还会调用 dismiss()
方法来关闭 DatePickerDialog
。它也适用于您用于“今天”的 DialogInterface.BUTTON_NEUTRAL
按钮。
避免这种情况的最简单方法可能是重写 DatePickerDialog.dismiss()
方法,并在单击“Today”按钮时跳过调用 super.dismiss()
。
这是我在 Kotlin 中用于相同目的的工作代码(DatePickerDialog
的 Today
按钮)。我使用 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;
}
关于java - 使用“今天”按钮更新 Android DatePickerDialog 中的日期而不关闭对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59276503/