我过去几周一直在使用数据绑定,现在正在尝试为带有“value”属性的自定义视图使用双向数据绑定。
我的问题是,在构建时遇到以下错误:
找不到接受参数类型“long”的<com.twisthenry8gmail.dragline.DraglineView app:value>的getter
据我了解,绑定库将自动使用我的公共setter和getter,但最令人困惑的部分是添加冗余的反向绑定适配器似乎解决了问题?所以我有这样的印象,它使用我的setter而不需要适配器,但对于getter则不是这种情况?
我的自定义视图
class DraglineView(context: Context, attrs: AttributeSet) : View(context, attrs) {
...
var value = 0L
set(value) {
draggedValue = value
field = value
invalidate()
}
...
}
我在布局文件中的视图
<com.twisthenry8gmail.dragline.DraglineView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:increment="@{viewmodel.type.minIncrement}"
app:minValue="@{viewmodel.type.minIncrement}"
app:value="@={viewmodel.target}" />
看似多余的适配器
@InverseBindingAdapter(attribute = "value")
@JvmStatic
fun getValueTest(draglineView: DraglineView): Long {
return draglineView.value
}
我的属性改变适配器
@BindingAdapter("valueAttrChanged")
@JvmStatic
fun setDraglineListener(draglineView: DraglineView, listener: InverseBindingListener) {
draglineView.valueChangedListener = {
listener.onChange()
}
}