1). 简介
ViewModel类旨在以生命周期意识的方式存储和管理UI相关数据。 ViewModel类允许数据在配置更改(例如屏幕旋转)后继续存在。
Android框架管理UI控制器的生命周期,例如活动和片段。 框架可以决定销毁或重新创建UI控制器以响应完全不受您控制的某些用户动作或设备事件。
2). 依赖
官方依赖
dependencies {
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // use -ktx for Kotlin
// alternatively - just LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData).
// Support library depends on this lightweight import
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // use kapt for Kotlin
// alternately - if using Java8, use the following instead of compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// optional - Test helpers for LiveData
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
但在此处我在Android Studio中未添加任何依赖,lifecyle包在Android Studio3.0之后就默认依赖了
3). 实现
/**
* 自定义ViewModel
* Created by mazaiting on 2018/7/25.
*/
class MyViewModel : ViewModel() {
var users: MutableLiveData<List<User>>? = null
get() {
if (null == field) {
users = MutableLiveData()
loadUsers()
}
return field
}
/**
* 加载数据
*/
private fun loadUsers() {
val userList = arrayListOf<User>()
(0..10).map { userList.add(User("first$it", "last$it")) }
users?.value = userList
}
}
4). 使用
btn_model_get_data.setOnClickListener {
val model: MyViewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(MyViewModel::class.java)
model.users?.observe(this, Observer { users ->
users?.forEach {
L.e(it.toString())
}
})
}
5). 解决的问题
- 解决Activity横竖屏切换时数据丢失的问题
- 简化Fragment之间数据传递,数据冗余的问题
网友评论