LiveData Transformation未被触发

Dna*_*kin 4 android-room android-livedata

我订阅idssearch在ui中,但我没有得到任何结果,所以我介入调试器,发现转换没有在第一次触发后触发.所以当我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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Aks*_*iya 17

转换未被触发的最常见原因是因为没有Observer观察它或输入LiveData没有被改变.

  • 尽管 Fragment/Activity 订阅了 `ids` 更新,为什么转换需要另一个观察者触发?我不明白这里的那部分。为什么我必须订阅 `idsInput ` LiveData 才能使 `transformation` 工作? (3认同)