Android数据绑定与Kotlin,BaseObservable和一个自定义委托

我正在尝试编写一个自定义的委托,它将清理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。

任何指导将不胜感激。

你可以注释默认的getter或setter而不提供一个body。

 var bar: String by Delegates.observable("") { prop, old, new -> notifyPropertyChanged(BR.bar) } @Bindable get 

有一个快捷方式注释使用网站的目标 ,做同样的事情。

 @get:Bindable var bar: String by Delegates.observable("") { prop, old, new -> notifyPropertyChanged(BR.bar) }