找不到属性“ android:checked”的吸气剂

时间:2018-12-05 21:47:19

标签: android kotlin android-databinding 2-way-object-databinding checkedtextview

  

数据绑定错误**** msg:在android.widget.CheckedTextView上找不到值类型为java.lang.Boolean的属性“ android:checked”的吸气剂。

我有一个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
}

1 个答案:

答案 0 :(得分:0)

此错误可能有不同的原因,但就我而言,问题是由于我没有在Gradle中添加应用插件:'kotlin-kapt'和应用插件:'kotlin-android-extensions'而引起的。 / p>

添加了这些插件后,您必须用kapt替换您的注释处理器。

在那之后,一切都会顺利进行。