扣丁学堂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开发工程师 Android视频教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号