【发布时间】:2020-12-26 22:06:22
【问题描述】:
我有一个看起来像这样的ViewModel 类:
class EditUserViewModel(
private val initUser: User,
) : ViewModel() {
private val _user = MutableLiveData(initUser)
val user: LiveData<User>
get() = _user
fun hasUserChanged() = initUser != _user.value
}
User可以通过UI更新User数据类实例的一些属性。
要检查从片段导航时是否有任何更改,我使用hasUserChanged 方法。
问题是这总是错误的。我检查了一下,似乎每次更改_user MutableLiveData 时initialUser 都会发生变化。
这是为什么? MutableLiveData的初始值是通过引用传递的吗?我一直认为 Kotlin 是一种“按值传递”类型的语言。
更新:
在将 initUser 复制到 MutableLiveData 之前,问题似乎消失了。
private val _user = MutableLiveData(initUser.copy())
但我仍然不明白为什么我必须这样做。
【问题讨论】:
标签: android kotlin pass-by-reference android-livedata pass-by-value