美文网首页
ViewModel的使用

ViewModel的使用

作者: 会写代码的小猿猴 | 来源:发表于2021-07-23 15:28 被阅读0次

前言

作为一个android开发的人,听的最多的就是MVX设计模式,比如MVC啊,还有以前比较火的MVP,但是现在最流行的应该就是MVVM了,MVVM拆解开就是:M--model类,V--view,VM--ViewModel,下面就来看看ViewModel的使用,这其实也是MVVM的设计思想。
使用中需要结合LiveData,如果对LiveData不熟悉的朋友,可以看看我的上一篇博客:
LiveData详解

1、添加依赖

ViewModel是LifeCycle的一个组件库,所以只需要添加LifeCycle库的依赖即可

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

2、创建一个model数据类,并定义需要的数据

class UserData(name: String, phone: Long) {
    var name1 = name
    var phone1 = phone
}

3、创建ViewModel类

import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class UserViewModel : ViewModel() {
    val mUserLiveData: MutableLiveData<UserData> = MutableLiveData<UserData>()

    //模拟 进行一些数据骚操作
    fun doSomething() {
        val user: UserData? = mUserLiveData.getValue()
        if (user != null) {
            user.name1="张志平"
            user.phone1=184682974
            mUserLiveData.value=user
        }
    }

    init {
        //模拟从网络加载用户信息
        mUserLiveData.postValue(UserData("周瑜", 187884674))
    }
}

4、在activity中将组件与ViewModel中的数据绑定

import android.annotation.SuppressLint
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.*

import kotlinx.android.synthetic.main.activity_main.*
import java.text.SimpleDateFormat

class MainActivity : AppCompatActivity() {
    @SuppressLint("ResourceType")
   /* val livedata=MutableLiveData<UserData>()*/
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        var userModel2=ViewModelProvider(viewModelStore,ViewModelProvider.NewInstanceFactory()).get(UserViewModel::class.java)
      /*  val userModel1:UserViewModel= ViewModelProviders.of(this).get(UserViewModel::class.java)*/
        userModel2.mUserLiveData.observe(this, Observer {
            name.text=it.name1
            phone.text=it.phone1.toString()
        })
        update.setOnClickListener {
            userModel2.doSomething()
        }
}
}

注意这一句代码

userModel2=ViewModelProvider(viewModelStore,ViewModelProvider.NewInstanceFactory()).get(UserViewModel::class.java)

这是一句创建ViewModel对象的代码,谷歌刚刚推出ViewModel的时候的写法不是这样的,旧的写法如下:

val userModel1:UserViewModel= ViewModelProviders.of(this).get(UserViewModel::class.java)

但是现在已经被淘汰了,很多网上的文章都还是这样的写法,其实新的写法更好,它里面的参数ViewModelProvider.NewInstanceFactory()是可以继承ViewModelProvider.Factory()并进行自定义的,更加的灵活。

其实这个简单的demo已经初步体现了MVVM的设计模式,当然还有一个更重要的角色LifeCycle没有出场,我会在下一篇文章详细介绍,就简单的记录一下自己的笔记,不理解的小伙伴可以在下面留言,第一时间会回复。

相关文章

  • Jetpack之-ViewModel

    ViewModel的使用 引入ViewModel 简单使用 使用ViewModel在两个fragment之间进行通...

  • Android jetpack :ViewModel

    本文主要是介绍如何简单使用viewmodel 1.创建自己的ViewModel 2.使用ViewModel 核心代...

  • ViewModel详解

    一、ViewModel使用 如图1,ViewModel使用很简单,只用将类继承ViewModel类即可 如图2,在...

  • Jetpack ViewModel组件其他使用方式-之四

    前言 前面介绍ViewModel时,说到ViewModel常与livedata联合使用;但是ViewModel不单...

  • JetPack组件学习ViewModel

    ViewModel的使用 1.需要先创建ViewModel类,继承自ViewModel重写onclear方法,使得...

  • ViewModel详解

    ViewModel是用来存储和管理UI相关数据的。 1、实现ViewModel ViewModel中一般使用Liv...

  • ViewModel的使用

    一、前言: 在页面(Activity/Fragment)很简单的情况下,通常我们会将UI交互,数据获取与处理等相关...

  • ViewModel的使用

    前言 作为一个android开发的人,听的最多的就是MVX设计模式,比如MVC啊,还有以前比较火的MVP,但是现在...

  • ViewModel的使用

    前言 在Android开发过程中,为了避免Activity过于臃肿,我们采用了LifeCycle来解耦生命周期相关...

  • ReactiveObjC应用

    一般来说,使用ReactiveObjC最好和viewmodel一起使用。单向绑定 viewModel.value改...

网友评论

      本文标题:ViewModel的使用

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