Skip to content

Instantly share code, notes, and snippets.

@lgawin
Created April 11, 2019 11:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lgawin/1c20667fda7549a9bd12e20cffea3494 to your computer and use it in GitHub Desktop.
Save lgawin/1c20667fda7549a9bd12e20cffea3494 to your computer and use it in GitHub Desktop.
Two-way adapter for `DatePicker` when using ThreeTenAbp
@BindingAdapter("date")
fun setDate(datePicker: DatePicker, value: LocalDate) {
if (value != LocalDate.of(datePicker.year, datePicker.month + 1, datePicker.dayOfMonth)) {
datePicker.updateDate(value.year, value.monthValue - 1, value.dayOfMonth)
}
}
@BindingAdapter(value = ["dateAttrChanged", "onDateChanged"], requireAll = false)
fun setDateChangeListener(
datePicker: DatePicker,
listener: InverseBindingListener?,
changeListener: DatePicker.OnDateChangedListener?
) {
if (listener != null || changeListener != null) {
val date = LocalDate.of(datePicker.year, datePicker.month + 1, datePicker.dayOfMonth)
datePicker.init(date.year, date.monthValue - 1, date.dayOfMonth) { _, _, _, _ ->
listener?.onChange()
changeListener?.onDateChanged(datePicker, date.year, date.monthValue - 1, date.dayOfMonth)
}
}
}
@InverseBindingAdapter(attribute = "date")
fun getDate(datePicker: DatePicker): LocalDate =
LocalDate.of(datePicker.year, datePicker.month + 1, datePicker.dayOfMonth)
@BindingAdapter("minDate")
fun setMinDate(datePicker: DatePicker, value: LocalDate) {
datePicker.minDate = value.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment