如果数据绑定中没有属性名称空间,则Intellisense将不起作用

时间:2019-03-30 17:18:36

标签: android android-studio android-databinding

有一个非常简单的bindingadapter函数。

@JvmStatic
@BindingAdapter("app:test")
fun testBind(v: View, test: Int) {
    //test...
}

如果在xml中应用此代码,通常看起来像这样:

enter image description here

自动完成功能可以正常工作,并且xml不会显示任何警告。

但是,此bindingadapter函数在编译时会输出警告。

warning: Application namespace for attribute app:test will be ignored.

许多其他帖子说,删除此警告的名称空间。

我将命名空间以及它从bindingadapter函数中删除了。

@JvmStatic
@BindingAdapter("test")
fun testBind(v: View, test: Int) {
    //test...
}

这样做不会在编译时打印出警告。

但是这次,xml显示警告。

enter image description here

此外,当命名空间存在时,正常工作的自动完成功能根本无法工作。

在我尝试过的所有方法中,解决所有两个警告的唯一方法是将名称空间指定为android。

还有其他方法吗? android名称空间似乎是一种误解,因为这是Android中的基本绑定功能,而不是自定义绑定功能。

1 个答案:

答案 0 :(得分:0)

如果在绑定适配器方法中使用单个参数,请在@BindingAdapter(...)字符串中删除名称空间,然后在调用xml中的字符串之前添加bind:名称空间。

 @JvmStatic
@BindingAdapter("icon")
fun setImage(view: ImageView, imageID: Int) {
}

bind:icon="@{vm.iconID}"

如果我使用多个属性,则无法使用。