【问题标题】:Cannot find the getter for attribute 'android:checked'找不到属性'android:checked'的getter
【发布时间】: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


【解决方案1】:

这个错误可能有不同的原因,但就我而言,问题是因为我没有在我的 Gradle 中添加 apply plugin: 'kotlin-kapt' 和 apply plugin: 'kotlin-android-extensions'。

添加这些插件后,您必须将 annotationProcessors 替换为 kapt。

在那之后,一切可能都会顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多