Jetpack是google现在主推的框架, 从开发效率,代码健壮程度,对未来的兼容性, 相较旧的开发框架都有一定优势. 所以开始学习吧
简介
1.ViewModel
主要优势之一, 就是在同一个Activity内, 跨Fragment共享数据非常方便
之二, 就是在系统设置改变后, Activity丢失状态的问题可以很好的解决
其他希望大佬可以补充下
2.liveData
既是一个观察者(观察生命周期, 适当的时候把自己回收)
也是一个被观察者(数据变更进行通知,但是数据通知只发生在生命周期活跃状态 STARTED、RESUMED)。
3.dataBinding
数据与界面双向绑定
xml可以直接回调bean的方法
数据变更后, xml会自动更新
用起来
1.viewBinding
用于替代findViewById() 和 Butterknife
参考官方文档
顺便 "kotlin-android-extensions" 插件也已经过期了 官方建议替换为viewBinding方式
版本前提:AndroidStudio 3.6+
Gradle plugin 3.6+
kotlin 1.4+
plugins{
//如果要用到@Parcelize
id 'kotlin-parcelize'
}
android{
//Android studio and Gradle 3.6+
viewBinding {
enabled = true
}
//Android studio and Gradle 4.0+
buildFeatures {
viewBinding true
}
}
代码中绑定
//例如 对应的xml文件为 aaa_bbb.xml 其中有 btn_id1 的按钮
//会自动生成 AaaBbbBinding类
//setContentView(R.layout.aaa_bbb.xml) 替换为如下
var binding = DataBindingUtil.setContentView(this, R.layout.aaa_bbb)
var btn_id1:Button = binding.btn_id1
至此, xml中的任何view都可以通过 binding.xxx 取到 (xxx对应 view的id)
2.ViewModel+LiveData+DataBinding
build.gradle
android{
//Android studio and Gradle 3.6+
viewBinding {
enabled = true
}
dataBinding {
enabled true
}
//Android studio and Gradle 4.0+
buildFeatures {
dataBinding true
viewBinding true
}
}
dependencies{
def lifecycle_version = "2.3.1"
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
// LiveData
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
}
定义ViewModel
class ExampleA:ViewModel(){
var value:MutableLiveData = MutableLiveData(0)
fun setVal(index:Int){
this.value.value = index
}
fun add(){
setVal(this.value.value!! + 1)
}
}
在xml中指定ViewModel
指定ViewModel类型 为 ExampleA
,别名为 exampleVm
使用 '@{exampleVm.value}'
取值, 如果有其他字符串混合 , 其他字符串用双引号""+
也可以使用@{exampleVm::add}
调用方法, 注意这里签名需要保持一致
其他用法参考官方文档
在activity/fragment中 绑定view model
var binding = DataBindingUtil.setContentView(this, R.layout.aaa_bbb)
binding.exampleVm = ViewModelProvider(this).get(ExampleA::class.java)
//必须关联生命周期 否则刷新无效
binding.lifecycleOwner = this
以上就完成了这三个库的简单配合使用, 如有错误, 请劳烦指正