扣丁学堂Android使用LiveData替换ObservableField做Data Binding
2018-01-18 13:46:16
1732浏览
AndroidStudio3.1Canary6开始支持使用LiveData做DataBinding。今天扣丁学堂给大家简单介绍下使用LiveData替换ObservableField做DataBinding(开发语言为kotlin)吧。
环境准备
1、安装AndroidStudio3.1Canary6或以上版本。
2、升级AndroidGradle插件
buildscript{
dependencies{
classpath'com.android.tools.build:gradle:3.1.0-alpha06'
}
}
3、更新databinding编译器的版本
kapt'com.android.databinding:compiler:3.1.0-alpha06'
app的build.gradle如下:
applyplugin:'com.android.application'
applyplugin:'kotlin-android'
applyplugin:'kotlin-kapt'
android{
compileSdkVersion26
defaultConfig{
applicationId"com.example.livedatabinding"
minSdkVersion21
targetSdkVersion26
versionCode1
versionName"1.0"
testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes{
release{
minifyEnabledfalse
proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}
dataBinding{
enabled=true
}
}
dependencies{
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation'com.android.support:appcompat-v7:26.1.0'
implementation'android.arch.lifecycle:extensions:1.0.0'
kapt'com.android.databinding:compiler:3.1.0-alpha06'
kapt'android.arch.lifecycle:compiler:1.0.0'
testImplementation'junit:junit:4.12'
androidTestImplementation'com.android.support.test:runner:1.0.1'
androidTestImplementation'com.android.support.test.espresso:espresso-core:3.0.1'
}
使用
原来使用ObserverableField的ViewModel
classUsersViewModel:ViewModel(){
privatevaluserRepository=UserRepository()
valname=ObservableField()
valage=ObservableInt()
init{
userRepository.addUser{
name.set(it.name)
age.set(it.age)
}
}
}
改用LiveData
classUserViewModel:ViewModel(){
privatevaluserRepository=UserRepository()
valname=MutableLiveData()
valage=MutableLiveData()
init{
userRepository.updateUserInfo{
name.postValue(it.name)
age.postValue(it.age)
}
}
}
注意:LiveData暴露公开两个方法用于设置值
postValue:允许后台线程向主进程推送数据
setValue:只允许在主线程调用,如果在其他线程调用会报错:Thismethodmustbecalledfromthemainthread
绑定LiveData并对Binding设置LifecycleOwer:
classUserActivity:AppCompatActivity(){
overridefunonCreate(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
valbinding:ActivityUserBinding?=setContentView(this,R.layout.activity_user)
valviewModel=ViewModelProviders.of(this).get(UserViewModel::class.java)
binding?.let{
it.viewModel=viewModel
it.setLifecycleOwner(this)
}
}
}
由于LiveData会遵从其他应用组件(如activity,fragment)的生命周期,它只会在UI组件处在active状态(如activity处在started和resumed)时才会推送数据。这样避免了我们UI展示数据时,需要检查下组件是否存在。
以上就是关于Android使用LiveData替换ObservableField做DataBinding的详细介绍,最后想向大家强调一点,学编程基础一定要打牢,所有的概念和知识点必须理解透彻,解更多请关注扣丁学堂
Android培训官网、微信公众号平台,扣丁学堂
Android视频教程从零基础到精通免费试听试学,就业终端服务系统随时监控学员的学习情况和效果,顺利毕业后根据学员自身风格和学习效果推荐就业。如果你想要学习Android开发工程师技术就不要再犹豫了,喜欢就付诸行动吧。
【关注微信公众号获取更多的学习资料】
标签:
Android开发从入门到精通
Android学习路线图
Android培训
Android开发工程师
Android视频教程