首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AndroidX与BindingAdapter

AndroidX与BindingAdapter
EN

Stack Overflow用户
提问于 2018-12-21 09:28:31
回答 2查看 1.8K关注 0票数 0

我有一些问题,让我的BindingAdapter工作在我的新应用程序。

我总是收到以下错误:

代码语言:javascript
复制
****/ data binding error ****msg:Cannot find the setter for attribute 'visible' with parameter type boolean

这是我的BindingAdapter:

代码语言:javascript
复制
object BindingAdapters {

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

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

代码语言:javascript
复制
<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开始,不需要进行迁移。

我在build.grade中有这一行:

代码语言:javascript
复制
annotationProcessor 'androidx.databinding:databinding-compiler:3.4.0-alpha09'

我用的是3.2.11级。

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

代码语言:javascript
复制
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,它就会失败。

我读到过,所以有些人声称数据库在X上没有正常工作,但这些都是10月份的帖子,还有人声称在同一篇文章中,它对他们非常有效。

我是忘记了一些愚蠢的东西,还是真的还没有和X一起工作呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-18 23:39:33

我使用Kotlin (1.3.30)、AndroidX、DataBinding和Gradle 3.4.0在小型新项目中再现问题

首先,Kotlin不适用于annotationProcessor,必须用Kotlin注释处理工具替换:kaptkotlin-kapt插件。

Kotlin文档

然后,在Gradle 3.1.0-alpha06 06中,Google包含了一个新版本的数据绑定编译器,默认情况下,从Gradle 3.2开始启用。

因此您不需要使用databinding-compiler依赖项(它是集成的)。

Android开发人员文档

但即使是整合,它也总是需要kapt。

因此,将apply plugin: 'kotlin-kapt'添加到build.gradle应用程序文件的顶部,并删除androidx.databinding:databinding-compiler依赖项,就可以解决这个问题。(对我来说很管用)

票数 3
EN

Stack Overflow用户

发布于 2019-01-04 18:37:39

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

我还注意到,如果在数据绑定表达式(如visible="@{viewModel.showGroup &amp;&amp; true}" )中使用布尔表达式,则输出一个基本布尔值,并且不再与Kotlin绑定适配器兼容。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53882215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档