提供一个观察viewModel的活动,该活动可以将值直接分配给viewModel livedata

问题描述 投票:0回答:1

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

viewModel.somedata = "some value"

知道活动已经在观察viewModel并且somedata是实时数据

android kotlin mvvm android-livedata
1个回答
0
投票

为了遵守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()方法,它将更新模型,这将更新视图。

© www.soinside.com 2019 - 2024. All rights reserved.