Architecture -- ViewModel

简介: 1). 简介ViewModel类旨在以生命周期意识的方式存储和管理UI相关数据。 ViewModel类允许数据在配置更改(例如屏幕旋转)后继续存在。Android框架管理UI控制器的生命周期,例如活动和片段。
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之间数据传递,数据冗余的问题
6). 原文地址
7). 代码下载
目录
相关文章
|
8月前
|
设计模式 编译器 API
【C/C++ Pimpl模式】隐藏实现细节的高效方式 (Pimpl Idiom: An Efficient Way to Hide Implementation Details)
【C/C++ Pimpl模式】隐藏实现细节的高效方式 (Pimpl Idiom: An Efficient Way to Hide Implementation Details)
737 1
|
8月前
|
Swift
swift相关项目包含私有库引起的Undefined symbols for architecture arm64
swift相关项目包含私有库引起的Undefined symbols for architecture arm64
110 0
|
流计算
Blueprint Subsystem Plug-in description
Blueprint Subsystem Plug-in description
94 0
|
XML 存储 缓存
如何把业务代码越写越复杂? | MVP - MVVM - Clean Architecture
本文以一个真实项目的业务场景为载体,描述了经历一次次重构后,代码变得越来越复杂(you ya)的过程。
487 5
Model-driven IIoT System for Manufacturing Activities
The model-driven Industrial IoT (IIoT) system proposed in this poster is used to address these requirements that arise in manufacturing activities of the industrial life cycle.
1192 0
|
Android开发 Kotlin Java
Architecture -- LiveData
1). 简介 LiveData是一个可观察的数据持有者类。 与常规observable不同,LiveData是生命周期感知的,这意味着它尊重其他应用程序组件的生命周期,例如活动,片段或服务。
1055 0
|
Kotlin Java
Architecture -- Lifecycle
1). 简介 生命周期感知组件执行操作以响应另一个组件(例如活动和片段)的生命周期状态的更改。 这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。
975 0
|
数据库 数据库管理 缓存
Architecture -- Room
1). 简介 Room persistence库为SQLite提供了一个抽象层,以便在利用SQLite的全部功能的同时实现更强大的数据库访问。 该库可帮助您在运行应用程序的设备上创建应用程序数据的缓存。
897 0
|
Android开发 数据格式 XML
Architecture -- Data Binding Library
1). 简介 Data Binding Library是一个支持库,允许在布局文件中绑定数据源。最小支持API为14,gradle插件最小为1.5.0。示例 2).
903 0
|
Android开发 Java Kotlin
Architecture -- WorkManager
1. WorkManager 1). 简介 其实就是"管理一些要在后台工作的任务, -- 即使你的应用没启动也能保证任务能被执行",WorkManager在底层, 会根据你的设备情况, 选用JobScheduler, Firebase的JobDispatcher, 或是AlarmManager。
908 0