【发布时间】:2021-11-05 07:32:11
【问题描述】:
我有一个可以应用过滤器的分页列表。用户应用过滤器后,recyclerview 应该在加载页脚中显示 0 个项目,直到它加载第一个项目并触发 LoadResul.Error 以防没有可显示的内容。
页脚工作正常,但您仍然可以看到调用 .invalidate() 之前存在的数据,并且您会看到该数据,直到它从后端获得新的响应(如果您的网络不好,这可能需要一些时间) .并且如果出现错误,旧项目仍然存在,并且会出现错误页脚。
关于如何实现这一点的任何想法?
我也在使用带有 RxJava 的库,所以这里是 DataSource 代码:
override fun getRefreshKey(state: PagingState<Int, Event>): Int = 1
override fun loadSingle(params: LoadParams<Int>): Single<LoadResult<Int, Event>> {
val key = params.key ?: 1
return repository.getCityEvents(
cityId = globalData.currentCityId,
start = selectedDates?.start?.toApiFormat(),
end = selectedDates?.end?.toApiFormat(),
pageNo = key,
categories = categoryFilters
)
.map { it.content }
.map { toLoadResult(it, params) }
.onErrorReturn { LoadResult.Error(it) }
}
private fun toLoadResult(data: List<Event>, params: LoadParams<Int>): LoadResult<Int, Event> {
val currentKey = params.key ?: 1
return if (data.isEmpty() && currentKey == 1)
LoadResult.Error(NoEventsException())
else
LoadResult.Page(
data = data,
prevKey = null,
nextKey = if (data.size < params.loadSize) null else currentKey + 1
)
}
【问题讨论】:
标签: android rx-java2 android-paging android-paging-library android-paging-3