android - ViewBinding vs Kotlin Android Extensions 与合成视图
问题描述
新的ViewBinding与带有合成视图绑定的Kotlin Android 扩展相比如何?
除了新的 ViewBindings 提供的 NullSafety 和 TypeSafety 之外,我们为什么要考虑放弃 Kotlin 在 Views 上使用合成绑定的方式?
新的 ViewBinding 是否更高效,因为它预先生成了 Binding 类?
解决方案
让我们回顾一下两者。
配置
Kotlin Android 扩展
- 导入适当的布局合成扩展:
import kotlinx.android.synthetic.main.<layout>.*
- 通过 id 引用代码中的视图:
textView.text = "Hello, world!"
. 这些扩展适用于Activities
:Fragments
和Views
。
视图绑定
- 在您的类中创建绑定引用:
private lateinit var binding YourClassBinding
binding = YourClassBinding.inflate(layoutInflater)
在Activity
'sonCreate
和 call中膨胀你的绑定,或者在'ssetContentView(binding.root)
中膨胀它然后返回它:Fragment
onCreateView
return binding.root
- 通过使用它们的 id 绑定来引用代码中的视图
binding.textView.text = "Hello, world!"
类型安全
Kotlin Android Extensions和ViewBinding在定义上是类型安全的,因为引用的视图已经被转换为适当的类型。
零安全
Kotlin Android Extensions和ViewBinding都是 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 :)
推荐阅读
- python - Pandas 的 sort_values 函数没有按预期工作?
- firebase - Rest API 身份验证策略以及如何在客户端应用程序上存储令牌
- python - 如何在 Google Cloud 中的文件上运行 Python 脚本
- python - 如何在 Numpy 中执行这个棘手的减法:
- android - 有没有办法在 RxJava(2) 中跟踪谁在主题上调用了 onNext()?
- html - 如何使边界边缘更靠近以消除边界内的空间
- java - 每当发出输入时替换变量值
- php - 即使代码中一切正常,标题位置也无法正常工作
- ruby-on-rails - 防止删除某个字段为非空白的记录
- javascript - Javascript - 图像大小之间的 Onclick 切换