其他分享
首页 > 其他分享> > Kotlin 插件的落幕,ViewBinding 的崛起,android适配问题

Kotlin 插件的落幕,ViewBinding 的崛起,android适配问题

作者:互联网

}

接下来我们看一下如何在项目中使用 DataBinding 和 ViewBinding,因文章篇幅原因,这里仅仅演示在 Activity 中使用,更多用法可以查看 Binding 库的示例。

Kotlin 插件的落幕,ViewBinding 的崛起

在模块级 build.gradle 文件内 开启 DataBinding 或者 ViewBinding 之后,需要在 Activity 中进行初始化,获取到 ViewBinding 实例即可使用。

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

// Viewbinding

val binding: ActivityMainBinding = ActivityMainBinding.inflate(layoutInflater)

// DataBinding

// val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)

with(binding){

textView.setText(“Binding”)

}

}

}

如果在每个 Activity 中都需要添加 ActivityMainBinding.inflate() 或者 DataBindingUtil.setContentView() 方法来进行初始化,这样无疑增加了很多模板代码,不仅仅是 Activity 在 Fragment 、Dialog 、Adapter 中都需要添加对应的方法来初始化。

那么能不能用一种方法,可以统一这些初始化方案,在 Kotlin 中是可以实现的,仅仅需要一行代码即可实现 DataBinding 和 ViewBinding。

一行代码实现 DataBinding 和 ViewBinding

================================

如果在每个 Activity 、 Fragment 、Dialog 、 Adapter 中都需要手动来添加相同的方法来初始化,这样的成本是非常大的,所以我们结合 Kotlin 委托属性,简化模板代码。

因此我推出了一个新库 Binding ,Binding 简化 DataBinding 和 ViewBinding 的使用, 只需要一行代码即可实现 DataBinding 和 ViewBinding,他们的实现方式并不相同。

Binding 未来的规划提供通用的 findViewById 解决方案,因技术的迭代更新从 butterknife 、 DataBinding 、 Kotlin 合成方法(Synthetic 视图)到现在 ViewBinding , 未来也有可能出现新的技术,无论技术怎么变化,只需要更新 Binding ,对外的使用保持不变。我们来看一下如何在项目中使用 Binding 库。

dependencies {

implementation ‘com.hi-dhl:binding:1.0.4’

}

class ProductViewHolder(view: View) : RecyclerView.ViewHolder(view) {

// 通过 DataBinding 绑定的 itemView

val binding: RecycleItemProductBinding by databind()

fun bindData(data: Product?, position: Int) {

binding.apply {

product = data

executePendingBindings()

}

}

}

class ProductViewHolderHeader(view: View) : RecyclerView.ViewHolder(view) {

// ViewBinding

val binding: RecycleItemProductHeaderBinding by viewbind()

fun bindData(data: Product?, position: Int) {

binding.apply {

name.text = “通过 ViewBinding 绑定的 head”

}

}

}

class MainActivity : AppCompatActivity() {

// DataBinding

val binding: ActivityMainBinding by databind(R.layout.activity_main)

// ViewBinding

val binding: ActivityMainBinding by viewbind()

}

class MainFragment : Fragment(R.layout.fragment_main) {

// DataBinding

val binding: FragmentMainBinding by databind()

// ViewBinding

val binding: FragmentMainBinding by viewbind()

}

class AppDialog(context: Context) : Dialog(context, R.style.AppDialog) {

val binding: DialogAppBinding by viewbind()

}

添加具有生命周期感知的 Dialog

class AppDialog(context: Context,lifecycle: Lifecycle) : Dialog(context, R.style.AppDialog) {

val binding: DialogAppBinding by viewbind(lifecycle)

}

更多详细的用法,可以前去仓库 Binding 查看,Binding 具有以下优点:

源码分析,将会在后续的文章中分享,如果这个仓库对你有帮助,请在仓库右上角帮我 star 一下,非常感谢。

如何迁移 Parcelable

===============

Kotlin 将 Parcelable 相关的功能,移到了新的插件 kotlin-parcelize,迁移只需要两步,如下所示。

Kotlin 插件的落幕,ViewBinding 的崛起

结语

==

文章中相关代码,已经上传到 GitHub 欢迎前去仓库 Binding 查看

Binding 地址:https://github.com/hi-dhl/Binding

感谢 Simple one-liner ViewBinding in Fragments and Activities with Kotlin 文章带来的思路,以及从 Anko 、和 ViewBindingDelegate 等等开源库中学习到技巧。

陆陆续续有一些小伙伴们问我在哪里,可以看一些国外技术文章,所以我也给大家总结了一些不错的网站。

Kotlin 插件的落幕,ViewBinding 的崛起

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

lin 插件的落幕,ViewBinding 的崛起](https://www.icode9.com/i/ll/?i=img_convert/122c03777330a0fd4669e99348133db4.png)

最后

由于题目很多整理答案的工作量太大,所以仅限于提供知识点,详细的很多问题和参考答案我都整理成了 PDF文件

[外链图片转存中…(img-9cmcgF5T-1643532697645)]

[外链图片转存中…(img-T50GMtUk-1643532697646)]

[外链图片转存中…(img-40rvcwbH-1643532697646)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

标签:插件,val,Kotlin,ViewBinding,binding,Binding,viewbind,适配,DataBinding
来源: https://blog.csdn.net/m0_66264655/article/details/122754033