我有一个继承自PagingDataAdapter的RecyclerView,在适配器内部我有两个viewHolders,它们按viewType划分,事实是我编写了一段代码,将两个请求的主体组合成一个MutableLiveData,然后可以在片段并通过submitData设置其值。
private val _searchResult = MutableLiveData<Resource<PagingData<SearchItems>>>()
val searchResult: LiveData<Resource<PagingData<SearchItems>>> = _searchResult
fun getSearchResult(q: String, id: String) = viewModelScope.launch {
_searchResult.postValue(Resource.Loading())
val searchDeferred = async { repository.getSearch(q) }
val channelsDeferred = async { repository.fetchChannels(id) }
val search = searchDeferred.await()
val channels = channelsDeferred.await()
channels.collect {
_searchResult.value = Resource.Success(it)
}
search.collect {
_searchResult.value = Resource.Success(it)
}
}
这是ViewModel中的代码
viewModel.searchResult.observe(viewLifecycleOwner, {
when (it) {
is Resource.Error -> {
it.message?.let { it1 -> Log.d("mecal", it1) }
}
is Resource.Success -> {
lifecycleScope.launch {
it.data?.map { item ->
viewModel.getSearchResult(
args.query,
item.snippet?.channelId.toString()
)
}
it.data?.let { it1 -> searchAdapter.submitData(it1) }
}
}
}
})
and 是Fragment 中的代码。关键是这段代码不起作用,即它不会在 recyclerview 中显示数据。但我不知道我到底做错了什么,如果你有任何建议为什么它不起作用或者有其他方法,请写信,我真的需要它!