首页 > 解决方案 > ViewBinding vs Kotlin Android Extensions 与合成视图

问题描述

新的ViewBinding与带有合成视图绑定的Kotlin Android 扩展相比如何?

除了新的 ViewBindings 提供的 NullSafety 和 TypeSafety 之外,我们为什么要考虑放弃 Kotlin 在 Views 上使用合成绑定的方式?

新的 ViewBinding 是否更高效,因为它预先生成了 Binding 类?

标签: androidkotlinkotlin-android-extensionsandroid-viewbinding

解决方案


让我们回顾一下两者。


配置

Kotlin Android 扩展

  1. 导入适当的布局合成扩展:import kotlinx.android.synthetic.main.<layout>.*
  2. 通过 id 引用代码中的视图:textView.text = "Hello, world!". 这些扩展适用于ActivitiesFragmentsViews

视图绑定

  1. 在您的类中创建绑定引用:private lateinit var binding YourClassBinding
  2. binding = YourClassBinding.inflate(layoutInflater)Activity'sonCreate和 call中膨胀你的绑定,或者在'ssetContentView(binding.root)中膨胀它然后返回它:FragmentonCreateViewreturn binding.root
  3. 通过使用它们的 id 绑定来引用代码中的视图binding.textView.text = "Hello, world!"

类型安全

Kotlin Android ExtensionsViewBinding在定义上是类型安全的,因为引用的视图已经被转换为适当的类型。


零安全

Kotlin Android ExtensionsViewBinding都是 null 安全的。ViewBinding 在这里没有任何优势。在KAE的情况下,如果视图仅存在于某些布局配置中,IDE 会为您指出:

在此处输入图像描述

因此,您只需将其视为 Kotlin 中的任何其他可为空的类型,错误就会消失:

在此处输入图像描述


应用布局更改

Kotlin Android Extensions的情况下,布局更改会立即转化为合成扩展的生成,因此您可以立即使用它们。在ViewBinding的情况下,您必须构建您的项目


布局使用不正确

Kotlin Android Extensions的情况下,可能会导入不正确的布局合成扩展,从而导致NullPointerException. 这同样适用于ViewBinding,因为我们可以导入错误Binding的类。Activity虽然,错误的导入比错误的类名更容易被忽略,特别是如果布局文件以/ Fragment/命名View,所以ViewBinding在这里占上风。


KAE 与 ViewBinding 的总结

  • 类型安全- 绘制。
  • 空安全- 平局。
  • 样板代码- KAE获胜。来自 Kotlin Android Extensions文档

Kotlin Android Extensions 插件允许我们获得与其中一些库相同的体验,而无需添加任何额外代码。

  • 应用布局更改- KAE获胜。与ViewBinding相比,更改是即时的。
  • 布局使用不正确- ViewBinding获胜

我认为ViewBinding替代KAE存在很大的误解。人们听到大关键字并重复它们而无需事先验证。当然,ViewBinding是目前 Java 开发的最佳选择(替代ButterKnife ),但在 Kotlin 中与KAE相比没有或几乎没有优势(请参阅不正确的布局使用部分)。

旁注: 我相信 DataBinding 的人会喜欢 ViewBinding :)


推荐阅读