美文网首页
Architecture -- ViewModel

Architecture -- ViewModel

作者: _凌浩雨 | 来源:发表于2018-07-25 11:50 被阅读25次
    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). 代码下载

    相关文章

      网友评论

          本文标题:Architecture -- ViewModel

          本文链接:https://www.haomeiwen.com/subject/thlpmftx.html