3
我正在嘗試編寫一個自定義代理,它將清理Kotlin類中數據綁定的語法。這將消除爲每個我想要觀察的屬性定義自定義getter和setter的需要。與Kotlin,BaseObservable和一個自定義代理的Android數據綁定
在科特林的標準實現看起來如下:
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。
任何指導,將不勝感激。