如何将两个请求体设置到一个RecyclerView?

问题描述 投票:0回答:1

我有一个继承自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 中显示数据。但我不知道我到底做错了什么,如果你有任何建议为什么它不起作用或者有其他方法,请写信,我真的需要它!

kotlin android-recyclerview kotlin-coroutines android-paging-library
1个回答
0
投票

这里我有一些你需要的非常相似的东西。这是一个聊天应用程序,使用相同的

RecyclerView
显示 2 个不同的
viewholders
,具体取决于消息是发送给您还是您发送的消息

© www.soinside.com 2019 - 2024. All rights reserved.