Android数据绑定库与Kotlin Android扩展程序

Joh*_*e90 32 binding android kotlin

我正在阅读MVVM架构如何工作以及如何使用Android数据绑定库帮助.

以一种非常通用的方式,我理解Android数据绑定在UI层和保存要显示的信息的底层数据模型之间创建链接.

Kotlin Android Extensions是另一个Kotlin插件,允许您从活动,片段和视图中恢复视图.该插件将生成一些额外的代码,允许您访问XML布局中的视图,就像它们是具有您在布局定义中使用的ID名称的属性一样.

使用Android数据绑定库和Kotlin Android Extensions有什么区别?它们用于不同的目的吗?他们以什么方式相互补充?

谢谢您的回答.

Sup*_*iya 21

Kotlin Android Extensions和Android数据绑定库都有助于消除使用findViewById.

但是,这些事情还有更多可以相互补充的事情.要详细说明,使用Android数据绑定库,您可以在xml文件中"设置"模型,然后可以直接利用这些模型为布局中的视图设置值.请参阅如何<data>标记可以通过数据绑定库中使用.

Kotlin安卓扩展程序没有提供此功能.与此同时,Kotlin android扩展提供了一些令人惊叹的功能,如@parcelize注释,使类几乎没有样板代码,等等.

总而言之,虽然他们都消除了使用findViewById,但他们也有自己的特点,可以相互补充.

  • 在生成代码或构建时间的情况下,您更喜欢哪一个? (4认同)

Oya*_*nlı 14

Kotlin Android扩展不代表仅视图绑定。它还包含其他功能。但是我猜您在谈论Kotlin Android扩展的视图绑定/缓存功能,并且想知道我们是否仍然需要数据绑定,因为我们已经摆脱了具有Kotlin合成属性的findViewById调用。这是我问自己的问题,我的结论是,是的,数据绑定仍然值得使用。

根据官方文件

数据绑定库在绑定类中为每个在布局中具有ID的视图创建一个不可变字段。该库通过一次操作从视图层次结构中提取包括ID的视图。这种机制比为布局中的每个视图调用findViewById()方法要快。

因此,数据绑定不会一一调用视图上的findViewById。另一方面,Kotlin的综合类仍在幕后视图上调用findViewById,但对于每个视图仅调用一次,并为下一次调用缓存视图引用。(这是一篇有关它的文章

此外,数据绑定不仅仅提供视图缓存,还提供了更多功能。您可以使用数据标签将数据传递到绑定实现,并在xml中声明它们,而无需通过编程方式进行设置。这样,您就可以摆脱用于填充数据的样板代码,例如那些“ setText”,“ setImageResource”等。您可以使用数据绑定从xml设置事件侦听器。您还可以使用自定义绑定适配器提供自己的属性。用尽其全部功能后,它可以显着减少Java / Kotlin代码。

编辑:似乎Google Android小组建议不要使用Kotlin合成属性。本文总结了有关此问题的讨论。您会在Google准备的新的Udacity课程中看到他们将数据绑定作为推荐做法。