android - 使用 LocalDate 而不是日月年的 DatepickerDialog

标签 android datepickerdialog jsr310

我正在尝试创建一个自定义 DatePickerDialog 类,该类将触发 onDateSet 监听器回调,但不包含“日”“月”和“年”值,我想重载构造函数以包含来自 java.time 的 LocalDate 。我知道我可以将这些值相互转换,但出于学习目的,我想直接执行此操作。

我以前从未扩展/重载过 Android 类,所以我不确定要采取哪些步骤。
我尝试创建一个扩展 DatePickerDialogCustomDatePickerDialog 类,但默认构造函数仍必须包含 super 构造函数,因此这并不能真正帮助我。

另一个想法是我可以将 Android 类 (DatePickerDialog) 复制到我的本地应用程序中,更改其中的名称和构造函数,然后使用我的新本地类。问题是,我找不到 DatePickerDialog (或任何与此相关的类)的源代码。我也觉得这是一种迂回的方式来解决问题。

更改扩展默认 Android 类的自定义类的构造函数的最佳方法是什么?

最佳答案

类似于(未测试)

public class CustomDatePickerDialog extends DatePickerDialog {

    public static interface CustomOnDateSetListener {
        void onDateSet(DatePicker view, LocalDate date);
    }

    public CustomDatePickerDialog(Context context,
            CustomOnDateSetListener listener, LocalDate date) {
        super(context, adaptListener(listener),
                date.getYear(), date.getMonthValue() - 1, date.getDayOfMonth());
    }

    private static OnDateSetListener adaptListener(CustomOnDateSetListener customListener) {
        return new OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                customListener.onDateSet(view, LocalDate.of(year, month + 1, dayOfMonth);
            }
        }
    }

}

最复杂的部分是自定义监听器。我正在为其声明一个新接口(interface)。我们需要将老式的 DatePickerDialog.OnDateSetListener 传递给父类(super class),因此在 adaptListener 中,我正在构建一个在调用时将调用转发给然后传递给构造函数的监听器,如下所示论证。

关于android - 使用 LocalDate 而不是日月年的 DatepickerDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51781268/

相关文章:

java - 当有人输入过去的日期时,我该如何阻止用户为 Android Studio 执行此操作?

java - Android 上的 ThreeTen-Backport 错误 - ZoneRulesException : No time-zone data files registered

java - 如何使用 Spring MongoTemplate 将 Java 8 Instant 作为 Date 类型保存到 MongoDB?

java - DatePickerDialog 中未显示该月的最后日期

java - Jooq LocalDateTime 字段使用系统时区而不是 session 时区

java - 如何模拟 Google API AndroidPublisher 请求

android - 如何通过传递一些参数来启动一个 Intent?

Android - Horizo​​ntalScrollView 不会一直滚动

java - 选择用于异步 http 文件上传的文件(uri 到文件路径)

android - 在 datePickerdialog 中设置特定日期