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

    相关文章

      网友评论

          本文标题:ViewModel的使用

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