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也将更改。但事实证明,这些请求再也不会被调用。有人知道哪里出了问题吗?感谢您的帮助!
更改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
}}