Slide 67
Slide 67 text
class ObservableListField(
private val adapter: RecyclerView.Adapter,
private val diffUtilCallbackProducer: (List, List) -> DiffUtil.Callback,
initialValue: List
) : ObservableProperty>(initialValue = initialValue) {
private var result: DiffUtil.DiffResult? = null
override fun beforeChange(
property: KProperty<*>,
oldValue: List,
newValue: List
): Boolean {
val diffUtilCallback = diffUtilCallbackProducer?.invoke(oldValue, newValue)
result = DiffUtil.calculateDiff(diffUtilCallback)
return true
}
override fun afterChange(property: KProperty<*>, oldValue: List, newValue: List) {
result?.dispatchUpdatesTo(adapter)
super.afterChange(property, oldValue, newValue)
}
}