ViewModel的使用

前言

作为一个android开发的人,听的最多的就是MVX设计模式,比如MVC啊,还有以前比较火的MVP,但是现在最流行的应该就是MVVM了,MVVM拆解开就是:M–model类,V–view,VM–ViewModel,下面就来看看ViewModel的使用,这其实也是MVVM的设计思想。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值