Android 数据绑定 - 找不到接受参数类型'long'的<>的 getter



过去几周我一直在使用数据绑定,现在正在尝试对具有"value"属性的自定义视图使用双向数据绑定。

我的问题是我在构建时收到以下错误。

找不到

现在我的理解是绑定库将自动使用我的公共资源库和获取器,但是最令人困惑的部分是添加冗余的反向绑定适配器似乎可以解决问题?所以我得到的印象是它使用我的二传手而不需要适配器,但吸气器不是这种情况吗?

我的自定义视图

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()
}
}

在我的数据对象和自定义 NumberPicker 之间使用双向数据绑定时,我遇到了类似的问题(编译时出现错误消息:找不到接受参数类型"int"的app:np_value> 的 getter(。

我用于数字选择器的库是 https://github.com/ShawnLin013/NumberPicker 的,根据其文档,当前值应使用np_value设置。它工作正常(值根据需要初始化(,除了双向数据绑定,它给了我上面的错误。

但是,将app:np_value更改为android:value(在注释和布局中(解决了这个问题。

在您的情况下,您可以尝试更换

@InverseBindingAdapter(attribute = "value")
@BindingAdapter("valueAttrChanged")
app:value="@={viewmodel.target}

@InverseBindingAdapter(attribute = "android:value")
@BindingAdapter("android:valueAttrChanged")
android:value="@={viewmodel.target}"

问题是数据绑定系统不知道视图何时更改

InverseBindingAdapter 不仅描述了如何从视图中检索,而且还定义了一个可选事件属性,该属性将接收 InverseBindingListener 实例。默认事件名称是后缀为"AttrChanged"的属性名称。

现在让我们看一下您的setDraglineListener()适配器。它处理InverseBindingAdapter添加的属性valueAttrChanged并接收InverseBindingListener。剩下的唯一事情就是在更改时通过调用listener.onChange()通知侦听器;

最新更新