LiveData不会更新

问题描述 投票:0回答:1
class RequestViewModel(private val repository: RequestRepository) : ViewModel() {

// request currency type
private val currencySearchType = MutableLiveData<String>()

val requests: LiveData<PagedList<Request>> = repository.getRequests(currencySearchType.value!!)

fun updateSearchType(type: String) {
    currencySearchType.postValue(type)
}}

以上是我的viewModel中的代码。

private fun initAdapter() {
        recyclerView.adapter = adapter
        viewModel.requests.observe(viewLifecycleOwner, Observer {
            adapter.submitList(it)
        })
} 

这是片段中的代码。因此,基本上,我正在做的是在viewModel中观察“请求”,并且在片段中,我还将调用updateSearchType来更新currencySearchType。我希望一旦currencySearchType更改,那么viewmodel.requests也将更改。但事实证明,这些请求再也不会被调用。有人知道哪里出了问题吗?感谢您的帮助!

android android-livedata mutablelivedata
1个回答
2
投票

更改currencySearchType的值不会触发您仅将其用作函数参数的实时数据。您必须为此使用Transformation。

https://developer.android.com/reference/android/arch/lifecycle/Transformations

class RequestViewModel(private val repository: RequestRepository) : ViewModel() {

// request currency type
lateinit var currencySearchType:String

val requests: LiveData<PagedList<Request>> = Transformations.switchMap(currencySearchType) { repository.getRequests(it) }

fun updateSearchType(type: String) {
    currencySearchType = type
}}
© www.soinside.com 2019 - 2024. All rights reserved.