ViewModel的使用

2021-07-23  本文已影响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没有出场,我会在下一篇文章详细介绍,就简单的记录一下自己的笔记,不理解的小伙伴可以在下面留言,第一时间会回复。

上一篇下一篇

猜你喜欢

热点阅读