Как установить тело двух запросов в один RecyclerView?
У меня есть RecyclerView, который наследуется от PagingDataAdapter, внутри адаптера у меня два viewHolder'a, они делятся по viewType'aм, дело в том что я написал код, который объединил тело двух запросов в один MutableLiveData, которые можно будет потом обсервить во фрагменте и установить его значение через submitDatа.
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'e
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) }
}
}
}
})
a это код во Фрагменте. Дело в том что этот код не работает, т.е он не отображает данные в recyclerview. Но я не знаю что именно я сделал не так, если у вас есть предложения почему он не работает или есть другой способ, прошу пишите, мне очень это нужно!
class SearchRepository @Inject constructor(
private val apiService: SearchApiService
) : BaseRepository() {
fun getSearch(
q: String,
max: Int
): Flow<PagingData<SearchItems>> {
return Pager(
config = PagingConfig(
pageSize = max,
initialLoadSize = max,
enablePlaceholders = false
)
) {
SearchPagingSource(apiService, q)
}.flow.map {
it.map { items ->
items.toSearch()
}
}
}
fun fetchChannels(
id: String
): Flow<PagingData<SearchItems>> {
return Pager(
config = PagingConfig(
pageSize = 10,
initialLoadSize = 10,
enablePlaceholders = false
)
) {
ChannelsPagingSource(apiService)
}.flow.map {
it.map { items ->
items.toSearch()
}
}
}
}