ViewModel 支持属性 [kotlin]

And*_*rea 7 android viewmodel kotlin

查看一些 Google 演示应用程序(如向日葵或 Google io 2018 应用程序)的代码,我注意到对于 viemodels 的支持属性,它们使用具有自定义 getter 的相同类型的单独实例;像这样:

private val _userData: MutableLiveData<User>
val userData: LiveData<User>
    get() = _userData
Run Code Online (Sandbox Code Playgroud)

但他们为什么要这样做?直接使_userData可访问性不是更好吗?难道是因为虽然_userDataMutableLiveData他们不想观察者能够改变的价值呢?

Sae*_*umi 6

userData暴露给 Activity 或 Fragment 的必须是不可变的,因为视图只需要观察到LiveData. 因此,我们需要使实际_userData返回 a LiveData

一种方法是使用科特林编码约定,并创建两个变量,_userData并且userData,一个是可变的,另外一个是不是:

如果一个类有两个概念上相同的属性,但一个是公共 API 的一部分,另一个是实现细节,请使用下划线作为私有属性名称的前缀。