【发布时间】:2018-12-05 21:47:19
【问题描述】:
数据绑定错误****msg:在 android.widget.CheckedTextView 上找不到值类型为 java.lang.Boolean 的属性“android:checked”的 getter。
我有一个 Kotlin Android 应用程序,其中一个 XML 布局包含一个 CheckedTextView,我想将选中的属性双向绑定到 ViewModel 的选中值。这个想法是 viewModel 中的 checked 属性将代表视图本身的属性。这将失败并显示上面的错误消息。现在我想知道这是否是因为checked 是一个布尔值并且getter 被称为isChecked。数据绑定不能识别吗?所以我尝试使用getChecked 函数对其进行扩展,但这并没有解决错误。可能是因为 Kotlin 支持扩展函数,而 Java 不支持。有什么想法可以解决这个问题吗?
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="viewModel"
type="lehrbaum.de.onenightcomps.view.SimpleCheckableListItemViewModel"/>
</data>
<CheckedTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
android:padding="@dimen/text_margin"
android:gravity="center_vertical"
android:textStyle="bold"
android:checkMark="?android:attr/listChoiceIndicatorSingle"
android:checkMarkTint="@color/colorPrimary"
android:checked="@={viewModel.checked}"
android:text="@{viewModel.text}"/>
</layout>
ViewModel 类:
class SimpleCheckableListItemViewModel {
val checked : MutableLiveData<Boolean> = MutableLiveData()
val text : MutableLiveData<String> = MutableLiveData()
}
扩展功能:
fun CheckedTextView.getChecked(): Boolean {
return this.isChecked
}
【问题讨论】:
-
您需要用
@BindingAdapter("checked")注释标记CheckedTextView.getChecked()。在双向数据绑定的情况下,您需要使用@InverseBindingAdapter("checked")的其他方法。详细指南描述here -
@ConstOrVar 但本指南仅适用于自定义属性。我没有使用自定义属性或自定义视图。有没有办法告诉 2-way-binding 使用现有的 isChecked 函数作为 getter?
-
是的,你是对的。可以给
SimpleCheckableListItemViewModel上课吗? -
@ConstOrVar 查看问题中的第二个代码 sn-p
标签: android kotlin android-databinding 2-way-object-databinding checkedtextview