android - 根据 API 响应中的条件将 header 添加到 RecyclerView Paging 3

标签 android android-recyclerview android-paging-3

我已经为我的 RecyclerView 实现了 Pager 3。现在,如果 API 响应设置了标志,我必须在我的回收站 View 中添加一个标题。
我现在正在做的是,当我收到响应时,我将此标志设置为静态变量,然后在 ViewModel 中检查此变量,然后添加如下标题:

//PagingDataSource
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, UIModel> {
        val position = params.key ?: STARTING_PAGE_INDEX
        val response = getUseCase(
            orgId = orgId,
            isPhysical = null,
            limit = params.loadSize,
            page = position
        )
    // SETTING FLAG HERE
    AppVariable.SessionData.myFlag = response.data.flag ?:false
    return LoadResult.Page(
                        data = response.data.data,
                        prevKey = if (position == STARTING_PAGE_INDEX) null else position - 1,
                        nextKey = if (data.isEmpty()) null else position + 1
                    )
}
在 viewModel 我检查这样的:
 fun fetchData(): Flow<PagingData<UIModel>> {
     val flow = Pager(
            ...
            pagingSourceFactory = {
                PagingDataSource(
                    ...
                )
            }
        ).flow
            .map { pagingData ->
                //ISSUE HERE
                if (AppVariables.SessionData.myFlag) { 
                        return@map pagingData.insertHeaderItem(
                            TerminalSeparatorType.SOURCE_COMPLETE,
                            UIModel.ActivateCardHeader
                        )
                    }
                pagingData
                }
             return flow
     }
现在的问题是 if 条件在我从服务器获得响应之前被调用,并且在我从服务器获得响应之后 this if 条件没有被调用(我知道这是因为我尝试设置调试点并且它没有命中在 API 响应之后。)如果调用 recyclerViewAdapter.refresh() 我的标题变得可见。
我该如何解决这个问题?

最佳答案

我知道这个解决方案的两种可能方法

  • 创建一个函数并在得到响应后调用它
    来自 onResponse 中的 API方法。
  • 或尝试对响应使用回调,例如

  • 使用回调
    interface MyCallback {
            fun onResponse(flag: Boolean)
        }
    
    并在得到结果后在您自己的响应中调用 onResponse使用实例 MyCallback 的方法实例并修改被覆盖的 onResponse 内的回收器 View 根据 flag 的方法范围。

    To learn about interfaces, check out link

    关于android - 根据 API 响应中的条件将 header 添加到 RecyclerView Paging 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72601511/

    相关文章:

    android - 检测安装的应用程序

    android - 我如何手动更新我的应用程序的回收 View ?

    android - 如何将 RecyclerView 上的最后一项滚动到顶部位置?

    android - 如何将返回堆栈添加到我的选项卡布局?

    kotlin - 如何处理 Kotlin Jetpack Paging 3 异常?

    android - 如何使用 firebase 数据库引用在 android studio 中创建带有代码的节点

    android - 如何为Android应用程序制作DLL

    android - 如何避免向 SQLite 数据库中插入重复项?

    android - 使用 RxJava 时在分页 3 库中刷新