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即可。非常感谢