android paging 3.0为recyclerview切换两个流程

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

因此,我有两个流具有来自两个不同 Api 的相同响应。我只有一个 recyclerview 分页适配器。现在,当满足某些条件时如何在两个流之间切换。例如,我有一个 SearchView,如果有人输入,我必须调用一个 API 来获取一个响应。如果我清除 SearchView,我必须从不同的 api 返回响应,但返回到附加的同一个 Recyclerview。

val mySecondList =
        flowOf(
            clearListCh.receiveAsFlow().map { PagingData.empty() },
            Pager (PagingConfig(pageSize = 1)) {
                somePagingSource(aedApi)
            }.flow.cachedIn(viewModelScope)

        ).flattenMerge(2)



val searchFlow = mutableSearchData.flatMapLatest {

        IOLog.d(TAG, "search Flow happening..$it")
        val jsonObject = JSONObject()
        jsonObject.put("keyword", it)
        val gson = getGsonObject(jsonObject)

        Pager(PagingConfig(pageSize = 1, enablePlaceholders = true)) {
            someSearchSource(aedApi, gson)
        }.flow
    }



 private val clearListCh = Channel<Unit>(Channel.CONFLATED)

    private val mutableLIve: MutableLiveData<String> = MutableLiveData()
    val liveStringData = mutableLIve

    fun clearListChannel() {
        IOLog.d(TAG, "clearListCh called..")
        clearListCh.offer(Unit)
    }

在 onCreate 的活动中,我正在初始化如下所示的内容

lifecycleScope.launchWhenStarted {
            viewmodel.searchFlow.collectLatest {
                IOLog.d("mutableSearchData", it.toString())

                adapter?.submitData(it)
            }
        }

        lifecycleScope.launchWhenStarted {
            viewmodel.mySecondList.collectLatest {

                adapter?.submitData(it)
            }
        }

如何在从一个范围发送到另一个范围的提交数据之间进行切换

android android-paging android-paging-3
1个回答
0
投票

一般来说,您希望从中收集单个流,以便您可以依靠

collectLatest
取消上一代。在这种情况下,您应该使用类似
flattenMerge
的内容将两个流程组合在一起,就像您对第一个流程所做的那样

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