在过去的几周里,我一直在使用数据绑定,现在正在尝试对具有“值”属性的自定义视图使用双向数据绑定。
我的问题是在构建时出现以下错误。
找不到接受参数类型“long”的 <com.twisthenry8gmail.dragline.DraglineView app:value> 的吸气剂
现在我的理解是绑定库将自动使用我的公共设置器和获取器,但是最令人困惑的部分是添加冗余的反向绑定适配器似乎可以解决问题?所以我得到的印象是它使用我的 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()
}
}