Android DataBinding学习(一):基础应用
一.DataBinding介绍二.基础应用
1.gradle配置2.简单使用
0x00.XML中的DataBinding使用0x01.数据类0x02.data中声明变量及类全名
(1)直接使用variable(2)使用import 0x03.variable绑定到UI界面
include的情况 0x04.Activity编码
小补丁 三.总结
Android DataBinding学习(一):基础应用 一.DataBinding介绍DataBinding是google官方推出的用于降低UI和业务代码耦合的技术,很好的使用DataBnding可以有效的减少Activity的臃肿,省去大量的findViewById的代码使用。
二.基础应用 1.gradle配置gradle的配置其实并不复杂。只需要开启对于DataBinding的支持。
在android{}里面加上下面的代码支持。
// 用来判断是否开启DataBinding功能
buildFeatures{
dataBinding = true
}
google官网关于DataBinding最新版本和gradle开启DataBinding支持的描述:
Google官方Databinding
对于DataBinding而言主要是两方面的编码。Activity和xml以及数据Model的编码,首先看看xml方面的编码。
0x00.XML中的DataBinding使用在构建XML中的databinding布局,可以使用AndroidStudio快捷组合键"alt+enter"后,选择点击 “Convert to data binding layout”,来快速生成dataBinding布局。代码如下:
注意到这里将xml根代码的换成了
data class User(var age: Int, var name: String)
这里直接使用kotlin的Data类,该类类似于Java Bean类。当然你也可以直接创建常规的Class类。
0x02.data中声明变量及类全名在data中声明变量有两种方法:
(1)直接使用variable
variable的意思是"变量",顾名思义,你需要绑定的数据类就是写在这里面。name类似于Java的变量名,type类似于Java的类名,但是需要注意,这里必须给出完全路径。通过这个"variable"可以解析到数据类。
(2)使用import
这里使用了import这个也是类似于Java的import,引入包名。name改成数据类的类名。
0x03.variable绑定到UI界面通过@{}绑定到UI界面上,代码如下:
include的情况
......省略代码...... ......省略代码......
DataBinding不支持merge。
0x04.Activity编码由于使用了DataBinding就可以不需要使用传统的setContentView(R.layout.activity_main),而是使用DataBindingUtil。代码如下:
class MainActivity : AppCompatActivity() {
// 使用空安全操作符'?'
private var activityMainBinding:ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
// 设置数据类给ActivityMainBinding
activityMainBinding?.user = User(21, "Jack")
}
}
由于我们使用了Kotlin所以其实上面的代码可以继续简化
class MainActivity : AppCompatActivity() {
private val activityMainBinding:ActivityMainBinding by lazy {
DataBindingUtil.setContentView(this, R.layout.activity_main)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 设置数据类给ActivityMainBinding,这里不需要使用空安全修饰符了
activityMainBinding.user = User(21, "Jack")
}
}
使用by lazy技术简化了一下,缺点是变量必须得是val属性的。
通过以上的编码,我们就可以成功的将User的数据显示到UI上面了。
(1) ActivityMainBinding类是插件自动生成的代码,该代码继承自ViewDataBinding,命名规则是基于xml的,xml名称是"activity_main",那么生成的代码就是ActivityMain后面加上’Binding’。
(2) ActivityMainBinding类可以调用XML上面的UI,比如上面的代码可以调用XML中的两个TextView,以及rootView
通过以上的编码可以看到使用DataBinding技术可以大大减少Activity的代码,减少Activity的臃肿。看到这里,大家可能在想如何更新UI界面上的数据呢?在下个文章我们将解决这个问题!



