【发布时间】:2022-01-05 00:45:19
【问题描述】:
我有一个继承自PagingDataAdapter的RecyclerView,在adapter里面我有两个viewHolder,它们是按viewType划分的,事实上我写了一个代码,将两个请求的body组合成一个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中显示数据。但是我不知道我到底做错了什么,如果您有任何建议为什么它不起作用或有其他方法,请写,我真的需要它!
【问题讨论】:
标签: android kotlin android-recyclerview kotlin-coroutines paging