LiveData不会在postValue()上更新

问题描述 投票:1回答:1

我具有以下用于搜索功能的UI。

 View (UI)   <<  ViewModel()  << LiveData(Remote)
(Search UI)      (Search VM)     Fetch data from remote

如上所述,ViewViewModel中观察到一个特定的方法,该方法返回LiveData如下:

override fun onStart() {
    super.onStart()
    viewModel.getSearchResultList().observe(viewLifecycleOwner, listChangeObserver)
}

// Observer responsible for updating the UI via adapter.
private val listChangeObserver: Observer<List<ProfessionalUser>> = Observer { users ->
    users?.let { updateUI(it) }
}

override fun onStop() {
    viewModel.getSearchResultList().removeObserver(listChangeObserver)
    super.onStop()
}

[在ViewModel中,initSearch(searchKey:String)过滤从远程接收到的LiveData,并为View准备最后一个作为打击:

// Initiates the search with supplied search keys.
fun initSearch(searchInput: String?) {

    // filtering happens in Deserializer() class
    val temp = Transformations.map(userListRemote, Deserializer())
    finalLiveData.postValue(temp.value)
}

并且initSearch在视图中将称为viewModel.initSearch(searchKey)。现在的问题是,temp从转换中接收到值,但不幸的是temp.value返回了null

我们在哪里出了什么问题?最优解决方案?预先感谢。

android android-lifecycle android-livedata android-architecture-components mutablelivedata
1个回答
1
投票

是您仓库中的userListRemoteLiveData吗?没有lifecycleowner,它将无法正常工作。

您可以尝试直接映射到您的finalLiveData,而不是使用temp

finalLiveData = Transformations.map(userListRemote, // do your mapping here)

以这种方式,userListRemote将使用viewLifecycleOwnerfinalLiveData

© www.soinside.com 2019 - 2024. All rights reserved.