【问题标题】:Giving an activity that observes a viewModel, can that activity assign value directlty to viewModel livedata给一个观察视图模型的活动,该活动可以直接将值分配给视图模型 livedata
【发布时间】:2020-03-24 00:03:23
【问题描述】:

从活动中调用它是一个好习惯吗:

viewModel.somedata = "some value"

知道 Activity 已经在观察 viewModel 并且 somedata 是 livedata

【问题讨论】:

    标签: android kotlin mvvm android-livedata


    【解决方案1】:

    为了遵守 MVVM 指南,最好由 ViewModel 处理。模型更新后视图也会更新。

    Kotlin 中的示例:

    有了这个示例模型,以及更新值的扩展函数:

    data class MyModel(
            val somedata: String,
            val otherdata: String
    )
    
    
    fun MyModel.toStateWithNewSomedata(newSomedata: String): MyModel =
            this.copy(
                    somedata = newSomedata
            )
    

    ViewModel 中的这个 LiveData 定义:

    var myLiveData = MutableLiveData<MyModel>()
    

    然后你在 ViewModel 中定义了这个方法,你可以从视图中调用它来更新值:

    fun updateSomedata(newVal: String) {
        myLiveData.value?.let { model ->
            val updatedModel = model.toStateWithNewSomedata(newVal)
            myLiveData.postValue(updatedModel)
        }
    }
    

    那么你仍然可以在视图中正常观察:

        viewModel.myLiveData.observe(this, Observer { updatedModel ->
            //update view with updated model
            val newSomedata = updatedModel.somedata
    
        })
    

    如果你调用updateSomedata()方法,它会更新模型,这会更新视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-25
      • 2011-01-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多