0
  • 我确实有一个分页数据源,它PagedData<T>在从 SQLite 初始加载后返回与 pagedAdapter 一起显示的数据。在一些服务器事务之后,我收到一个列表,List<T>在转换和缓存之后需要显示它。
  • 我知道使用 Room db 会很容易,但现在已经不在讨论范围内了。如何更新初始分页列表并创建一个新的 pagedList,然后将其推送到适配器。
  • 尝试在新服务器列表上使用映射转换为 PagingDataObject 但据我所知这是不可能的。list.map { item -> {PagingData<item>}
4

1 回答 1

0

如果您希望可以实现自己的 pagingSource,则不必使用 Room。paging3 codelab的前半部分向您展示了如何实现这一目标。像这样创建寻呼机:

Pager(
      config = PagingConfig(
        pageSize = 10,
        enablePlaceholders = false
     ),
      pagingSourceFactory = { MyPaginSource() }
).flow

MyPaginSource像这样实现:

class MyPaginSource() : PagingSource<Int, MyItem>() {

override suspend fun load(params: LoadParams<Int>): LoadResult<Int, MyItem> {
    if(params.key == null){
        //load initial list from where ever you want, and create your own key 
        //to load next page of data
        val firstPage = //todo
        val nextKey  = //todo
        return LoadResult.Page(
                data = firstPage ,
                prevKey = null,
                nextKey = nextKey
        )
    } else{
        //load the other pages based on your key, for example from server 
        val newPage = //todo
        val nextKey  = //todo if you need to continue loading
        return LoadResult.Page(
                data = newPage ,
                prevKey = null,
                nextKey = nextKey
        )
    }
}
}
于 2021-04-29T13:30:21.430 回答