java - 使用“今天”按钮更新 Android 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.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 中用于相同目的的工作代码(DatePickerDialogToday 按钮)。我使用 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/

相关文章:

java - 分组 Java8 流而不收集它

java - SpringBoot反序列化无默认构造函数

java - 验收测试增量值

android - 使用带有 ActionBarSherlock 和 Roboguice 的 maven android 构建失败

java - 格式 hh :mm:ss 的解析时间

c# - 允许字母、数字、小数、空格和下划线的正则表达式模式

android - 当按下后退按钮时,光标加载器应该重新启动

android - 溢出菜单不显示 - android

java - 在android中比较包含时间的字符串与系统时间

java - 如何使用 Spring Data JPA 按日期和时间进行搜索?