Я использовал привязку данных в течение последних нескольких недель, и теперь я пытаюсь использовать двустороннюю привязку данных для пользовательского представления с атрибутом value.
Моя проблема в том, что я получаю следующее ошибка при сборке.
Не удается найти геттер для который принимает тип параметра 'long'
Теперь я понял, что библиотека привязки будет автоматически использовать мои сеттеры и геттеры publi c, однако самая запутанная часть - добавление избыточного адаптера обратной привязки, похоже, решать проблему? Таким образом, у меня создается впечатление, что он использует мой сеттер без адаптера, но это не относится к геттеру? был бы очень признателен. Вот мой соответствующий код, спрашивайте, если у вас есть вопросы!
Мой пользовательский вид
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()
}
}