【发布时间】:2020-07-05 19:46:31
【问题描述】:
我指的是github上的Plaid开源项目Link to Plaid
它是学习 Android 新技术的绝佳资源。
在阅读代码时,我遇到了 LiveData 周围的某种编码风格,我真的不明白。如果有人可以帮助我得到它。
如下:
这段代码有一个ViewModel(vm):
private val _openLink = MutableLiveData<Event<String>>()
val openLink: LiveData<Event<String>>
get() = _openLink
相当简单?请注意,这里有 2 个变量:openLink 和 _openLink。 openLink 的 getter 正在返回 _openLink LiveData。
在活动中他们观察openLinkLiveData如下:
viewModel.also { vm ->
vm.openLink.observe(this, EventObserver { openLink(it) })
..... // Other stuff
}
现在,另一个 livedata _openLink 被 UI 调用,据称是在单击按钮时,它的定义如下:
fun viewShotRequested() {
_shotUiModel.value?.let { model -> // ignore this part
_openLink.value = Event(model.url) // setValue on _openLink
}
}
所以我的理解是,在setValue() 上_openLink,EventObserver{openLink(it)} 将被调用。
我的问题是,他们为什么要这样做?
问题:
为什么不直接观察
_openLink上的?不会有同样的效果吗?我在这里想念什么?
【问题讨论】:
-
不暴露 Mutable 部分
标签: android android-livedata android-architecture-components plaid