【发布时间】:2018-03-16 14:06:46
【问题描述】:
我在 ui 中订阅了 ids 和 search,但没有得到任何结果,所以我逐步调试了调试器,发现在第一次之后没有触发转换。因此,当我第一次调用setIds 时,ids 会更新,但在第一次调用之后的每次调用都不会触发转换。 search 也是如此。
有什么想法可能会出错吗?
class MyViewModel : ViewModel() {
private val repository = Repository.sharedInstance
var recentRadius: LiveData<List<RecentRadius>>?
var recentRoute: LiveData<List<RecentRoute>>?
init {
recentRadius = repository.recentRadius()
recentRoute = repository.recentRoute()
}
private val idsInput = MutableLiveData<String>()
fun setIdsInput(textId: String) {
idsInput.value = textId
}
val ids: LiveData<List<String>> = Transformations.switchMap(idsInput) { id ->
repository.ids(id)
}
private val searchInput = MutableLiveData<Search>()
fun setSearchInput(search: Search) {
searchInput.value = search
}
val search: LiveData<SearchResult> = Transformations.switchMap(searchInput) { search ->
when (search.type) {
SearchType.ID -> repository.id(search)
SearchType.RADIUS -> repository.radius(search)
SearchType.ROUTE -> repository.route(search)
}
}
}
【问题讨论】:
-
转换没有被触发的最常见原因是没有
Observer观察它或者输入LiveData没有改变。 -
@AkshayChordiya 谢谢这帮助我解决了我的问题。我在他们的
onCreate()中注册了我的片段,但我切换了它们,导致观察者迷路了。 -
我会将其发布为答案,以便其他人能够找到根本原因
标签: android-room android-livedata