【发布时间】:2017-09-04 02:31:23
【问题描述】:
我正在尝试编写一个自定义委托,它将清理 Kotlin 类中数据绑定的语法。它将消除为我可能想要观察的每个属性定义自定义 getter 和 setter 的需要。
Kotlin 中的标准实现如下所示:
class Foo : BaseObservable() {
var bar: String
@Bindable get() = bar
set(value) {
bar = value
notifyPropertyChanged(BR.bar)
}
}
很明显,这个类有很多属性,可能会变得非常冗长。我想要的是把它抽象成这样的委托:
class BaseObservableDelegate(val id: Int, private val observable: BaseObservable) {
@Bindable
operator fun getValue(thisRef: Any, property: KProperty<*>): Any {
return thisRef
}
operator fun setValue(thisRef: Any, property: KProperty<*>, value: Any) {
observable.notifyPropertyChanged(id)
}
}
然后,扩展 BaseObservable 的类可以回到单行变量声明:
class Foo : BaseObservable() {
var bar by BaseObservableDelegate(BR.bar, this)
}
问题是Foo类中没有@Bindable注解,在BR中没有为bar生成propertyId。我不知道用于生成该属性 ID 的任何其他注释或方法。
任何指导将不胜感激。
【问题讨论】:
标签: android kotlin observable android-databinding