Closed iotxc closed 2 years ago
observeState(this,` T::a, T::b) { a, b-> }
是的这样表示,a和b数据的改变会触发同一个action
liveData {
observeState(this, T::a) { }
observeState(this, T::b) { }
}
而这样表示只监听一个属性,监听的代码是没有区别,区别在于在ViewModel中定义的LiveData少了
我的想法是在data中增加一个字段用于区分UI应该更新哪部分数据
open class BaseViewSate {
var state: Int = INIT_STATE
companion object {
const val INIT_STATE = 0
}
}
每个业务数据对应一种状态
data class MainViewState(
val fetchStatus: FetchStatus = FetchStatus.NotFetched,
val newsList: List<NewsItem> = emptyList()
): BaseViewSate() {
companion object {
const val LIST= 1
}
}
这样UI的模板代码可以相应的减少
viewModel.viewStates.observe(this) {
when (it.state) {
LIST -> { }
}
}
不过还是那句话,代码只是转移了,代码量并没有减少
我不懂,UI应该更新哪部分数据,相应部分的UI订阅相应的属性不就可以了吗,为啥搞个基类出来?并且ViewState里的变量应该都是val,而不应该是var类型的 可以看下Android架构指南,界面层订阅相应状态部分:https://developer.android.com/jetpack/guide/ui-layer?hl=zh-cn#show-operations
这样写表示的应该是a和b数据的改变会触发同一个action吧?
如果这样写:
跟直接observe没区别啊,代码还是不够简洁.