我已经为我的 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/