0

我在让我的 BindingAdapter 在我的新应用程序中工作时遇到了一些问题。

我总是收到以下错误:

****/ data binding error ****msg:Cannot find the setter for attribute 'visible' with parameter type boolean

这是我的 BindingAdapter:

object BindingAdapters {

@set:BindingAdapter("visible")
@JvmStatic
var View.visible
    get() = visibility == View.VISIBLE
    set(value) {
        visibility = if (value) View.VISIBLE else View.GONE
    }
}

这是在 XML 中生成问题的视图:

<TextView
        android:id="@+id/tvDescription"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/item_horizontal_margin_large"
        android:text="@{viewModel.item.description}"
        visible="@{viewModel.showGroup}"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@id/ctvDivision"
        app:layout_constraintTop_toTopOf="parent" />

这是一个新项目,所以我从 Android X 开始,不需要进行迁移。

我在 build.grade 中有这一行:

annotationProcessor 'androidx.databinding:databinding-compiler:3.4.0-alpha09'

我正在使用 gradle 3.2.11。

我不确定这是否需要,但这是我膨胀绑定的代码:

override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    setHasOptionsMenu(true)

    binding = DataBindingUtil.inflate(
            layoutInflater,
            R.layout.fragment_good,
            container,
            false
    )

    val view = binding?.root
    binding?.viewModel = viewModel

    return view
}

所有其他标准数据绑定的东西都有效。一旦我尝试设置 BindingAdapter,它就会失败。

我在 SO 上读到有人声称数据绑定不能与 X 一起正常工作。但这些是 10 月份的帖子,有人声称它在同一篇文章中对他们来说非常有效。

我是否忘记了一些愚蠢的事情,或者它真的还没有与 X 一起工作?

4

2 回答 2

3

我在使用 Kotlin (1.3.30)、AndroidX、DataBinding 和 Gradle 3.4.0 的小型新项目中重现了这个问题

首先,Kotlin 不支持annotationProcessor,必须用 Kotlin Annotation Processing Tool: kaptwith kotlin-kaptplugin 代替。
Kotlin 文档

然后在 Gradle 3.1.0-alpha06 中,Google 包含了自 Gradle 3.2 以来默认启用的数据绑定编译器的新版本。
所以你不需要使用databinding-compiler依赖(它是集成的)。
Android 开发者文档

但即使集成,它总是需要kapt
因此,在您的应用程序apply plugin: 'kotlin-kapt'文件顶部添加并删除依赖项,应该可以解决问题。(它对我有用)build.gradle androidx.databinding:databinding-compiler

于 2019-04-18T23:39:33.757 回答
-1

我遇到了同样的问题。如果您的绑定适配器是用 Kotlin(而不是 Java)编写的,那么您不能再将 Java 原始布尔变量传递给它们(或任何原始 Java 类型)。将您的 viewModel.showGroup 更改为 Java.lang.Boolean 或者最好是 Kotlin 布尔值。

我还注意到,如果您在数据绑定表达式中使用布尔表达式,例如visible="@{viewModel.showGroup &amp;&amp; true}",那么它会输出 Java 原始布尔值,并且不再与 Kotlin 绑定适配器兼容。

于 2019-01-04T18:37:39.020 回答