首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓Paging3可变页面大小

安卓Paging3可变页面大小
EN

Stack Overflow用户
提问于 2020-11-14 12:40:18
回答 1查看 434关注 0票数 0

在每个页面的大小可能不同的情况下,如何使用paging3库?

我正在尝试显示一个日历,其中每个页面由一周表示,并且每周可以在其中有0到n个会议。

我认为我可以在DataSource中使用今天的日期作为初始加载的分页密钥,并使用±7天作为上一页/下一页的分页密钥,例如:

代码语言:javascript
复制
class CalendarPagingSource @Inject constructor(
    private val calendarApi: CalendarApi,
) : RxPagingSource<ZonedDateTime, Meeting>() {

    override fun loadSingle(params: LoadParams<ZonedDateTime>): Single<LoadResult<ZonedDateTime, Meeting>> { 
        val page = params.key ?: ZonedDateTime.now()
        val startDate = page.format(ofPattern("yyyy-MM-dd"))

        return calendarApi
            .myMeetings(startDate)
            .map { toLoadResult(page, it) }
            .onErrorReturn { LoadResult.Error(it) }
    }

    private fun toLoadResult(key: ZonedDateTime, entries: List<Meeting>): LoadResult<ZonedDateTime, Meeting> {
        val now = ZonedDateTime.now()

        // Do not load more than 90 days before and after today
        return LoadResult.Page(
            data = entries,
            prevKey = if (now.minusDays(90L).isBefore(key)) key.minusDays(DATE_RANGE) else null,
            nextKey = if (now.plusDays(90L).isAfter(key)) key.plusDays(DATE_RANGE) else null 
        )
    }
}

但我正面临着一个问题,我不能提前知道一个特定的星期会有多少个会议。

代码语言:javascript
复制
class CalendarRepository @Inject constructor(
    private val pagingSource: CalendarPagingSource
) {

    fun myMeetings(): Observable<PagingData<Meeting>> {
        return Pager(
            config = PagingConfig(
                pageSize = ???, 
                enablePlaceholders = false
            ),
            pagingSourceFactory = { pagingSource }
        ).observable
    }
}

有没有一种方法可以让我不必指定pageSize,只需使用分页键(在本例中为ZonedDateTime)就可以进行分页?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-16 03:12:40

pageSize只是一个发送给LoadParams的提示,paging3可以很好地处理可变的页面大小,并且您的PagingSource不需要考虑loadSize被请求的内容。

只需在LoadParams.loadSize中输入您想要显示的任何数字。通常,它可以是基于您的视区大小的内容,以便您可以估计要加载的事件的天数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64830990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档