【问题标题】:Android Paging3 Varying Page SizeAndroid Paging3 改变页面大小
【发布时间】:2020-11-14 04:40:18
【问题描述】:

如何使用 paging3 库,其中每个页面的大小都可以变化?

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

我想我可以在我的 DataSource 中将今天作为分页键用于初始加载,将 ±7 天用于上一页/下一页,例如:

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 
        )
    }
}


但我面临一个问题,即我无法提前知道特定一周将举行多少次会议。


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)进行分页?

【问题讨论】:

    标签: android android-jetpack android-paging-3


    【解决方案1】:

    pageSize 只是发送到LoadParams 的提示,paging3 可以很好地处理可变页面大小,您的PagingSource 不需要尊重loadSize 的请求。

    只需在LoadParams.loadSize 中输入您想出现的任何数字。通常它可能是基于视口大小的东西,因此您可以估计要加载多少天的事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 2017-07-14
      相关资源
      最近更新 更多