我正在尝试创建一个自定义 DatePickerDialog
类,该类将触发 onDateSet
监听器回调,但不包含“日”“月”和“年”值,我想重载构造函数以包含来自 java.time 的 LocalDate
。我知道我可以将这些值相互转换,但出于学习目的,我想直接执行此操作。
我以前从未扩展/重载过 Android 类,所以我不确定要采取哪些步骤。
我尝试创建一个扩展 DatePickerDialog
的 CustomDatePickerDialog
类,但默认构造函数仍必须包含 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/