Android PagerSnapHelper 在用户移动到下一页数据之前预加载下一页数据(如 ViewPager2 中的 setOffscreenPageLimit)

问题描述 投票:0回答:1

我正在开发一款应用程序,它通过媒体滑块显示 Instagram 类型的帖子提要。我使用 Recyclerview 和 PagerSnapHelper 开发了一个后媒体滑块,以将媒体列表显示为水平寻呼机列表。但它仅加载用户可见的媒体,而不预加载下一个媒体。我进行了谷歌搜索,但没有找到如何在这种情况下设置页面的屏幕外限制。我知道我们可以通过使用

setOffscreenPageLimit
方法来使用 ViewPager2 来完成此操作,但不确定如何在我的 Recyclerview 与 PagerSnapHelper 用例中执行此操作。我担心我可能不得不使用 ViewPager2 重写媒体滑块。

android android-recyclerview
1个回答
0
投票

我最近也遇到了同样的问题,最终在

ViewPager2
的源码中找到了解决方案。它包含
LinearLayoutManager
的内部实现,覆盖
calculateExtraLayoutSpace()
函数。因此,我实现了相同的
LayoutManager
并将其应用到使用
PagerSnapHelper
的 RecyclerView:

   val layoutManager = object : LinearLayoutManager(recyclerView.context, HORIZONTAL, false) {

        private val offscreenPageLimit = 2 // number of pages that will be retained to either side of the current page

        override fun calculateExtraLayoutSpace(state: RecyclerView.State, extraLayoutSpace: IntArray) {
            val offscreenSpace: Int = getPageSize(this) * offscreenPageLimit
            extraLayoutSpace[0] = offscreenSpace
            extraLayoutSpace[1] = offscreenSpace
        }
    }

    fun getPageSize(layoutManager: LinearLayoutManager): Int = with(recyclerView) {
        if (layoutManager.orientation == LinearLayoutManager.HORIZONTAL) {
            width - paddingLeft - paddingRight
        } else {
            height - paddingTop - paddingBottom
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.