0

我很难找到一种方法来实现允许我跳到目标位置附近然后平滑滚动到它的滚动行为。

我从 Room PagingSource<Int, CustomObject> 获取数据

我尝试使用 PagingDataAdapter#getItem() 方法在目标位置触发加载,但它只加载这个项目,没有别的,所以它显示了一堆占位符。

在阅读文档时,我想不出一种加载页面或跳转滚动的方法。

有 JumpSmoothScroller 代码,直接从 Google IO sched 应用程序复制粘贴

class JumpSmoothScroller(
    context: Context,
    private val jumpThreshold: Int
) :
    LinearSmoothScroller(context) {

    override fun getVerticalSnapPreference() = SNAP_TO_START

    override fun getHorizontalSnapPreference() = SNAP_TO_START

    override fun onSeekTargetStep(dx: Int, dy: Int, state: RecyclerView.State, action: Action) {
        val layoutManager = layoutManager as? LinearLayoutManager
        if (layoutManager != null) {
            if (targetPosition + jumpThreshold < layoutManager.findFirstVisibleItemPosition()) {
                action.jumpTo(targetPosition + jumpThreshold)
                return
            }
            if (targetPosition - jumpThreshold > layoutManager.findLastVisibleItemPosition()) {
                action.jumpTo(targetPosition - jumpThreshold)
                return
            }
        }

        super.onSeekTargetStep(dx, dy, state, action)
    }
}

编辑:我的目标是加载起始位置和目标页面之间的每个页面(或至少目标页面和上一个页面),这样我就可以安全地跳转到目标项目下方的 10 个项目。然后我只需要平滑滚动到目标

4

0 回答 0