R.layout.dialog_app -> DialogAppBinding
从 Android Studio 3.6 版本开始,就内置在 Gradle 插件中了,不需要添加任何额外的库来使用它们,但是在 Android Studio 3.6 和 Android Studio 4.0 中使用方式不一样。
// Android Studio 3.6
android {
viewBinding {
enabled = true
}
dataBinding{
enabled = true
}
}
// Android Studio 4.0
android {
buildFeatures {
dataBinding = true
viewBinding = true
}
}
接下来我们看一下如何在项目中使用 DataBinding 和 ViewBinding,因文章篇幅原因,这里仅仅演示在 Activity 中使用,更多用法可以查看 Binding 库的示例。
在模块级 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 库。
- 将下列代码添加在模块级 build.gradle 文件内,并且需要开启 DataBinding 或者 ViewBinding
dependencies {
implementation ‘com.hi-dhl:binding:1.0.4’
}
- 在 Adapter(ListAdapter、PagingDataAdapter、RecyclerView.Adapter 等等)中使用 DataBinding 和 ViewBinding,添加 by viewbind() 或者 by databind() 即可,示例如下所示,查看详细示例
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”
}
}
}
- 在 Activity 、AppCompatActivity 、FragmentActivity 中使用,继承对应的类添加 by viewbind() 即可如下所示。
class MainActivity : AppCompatActivity() {
// DataBinding
val binding: ActivityMainBinding by databind(R.layout.activity_main)
// ViewBinding
val binding: ActivityMainBinding by viewbind()
}
- 在 Fragment 中使用方式如下所示。
class MainFragment : Fragment(R.layout.fragment_main) {
// DataBinding
val binding: FragmentMainBinding by databind()
// ViewBinding
val binding: FragmentMainBinding by viewbind()
}
- 在 Dialog 中使用方式如下所示。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取
RS13yV1z-1711188741942)]
最后
考虑到文章的篇幅问题,我把这些问题和答案以及我多年面试所遇到的问题和一些面试资料做成了PDF文档,如果有需要的朋友可以私信我【面试】免费领取
[外链图片转存中…(img-CJzbdxzv-1711188741943)]
[外链图片转存中…(img-JO3mPTma-1711188741943)]
喜欢的朋友可以关注、转发、点赞 感谢!