繁体   English   中英

Kotlin/RecyclerView:scrollToPositionWithOffset 未显示

[英]Kotlin/RecyclerView: scrollToPositionWithOffset Not Showing Up

我想了解为什么我似乎无法在 LinearLayoutManager 上使用 scrollToPositionWithOffset 方法? 请看图片了解我的意思:

一点背景:

图像中的第一行(带有scrollToPosition<\/code> )正在滚动 RecyclerView 以使位置(在本例中为 50)可见<\/strong>- 这通常意味着所选位置显示在可见 RecyclerView 的底部(其中位置 50 首先变为可见之后'滚动')。 而我想始终将其显示在顶部。 根据我的研究,某种解决方案似乎是使用此scrollToPositionWithOffset<\/code>方法( 滚动 RecyclerView 以在顶部显示所选项目<\/a>)

有趣的是,我能够通过自定义 LinearLayoutManager 的 SmoothScroller 来实现我想要的,但是我的数据集很大,所以“平滑滚动”的速度是一个问题,而且我似乎无法在不引起其他问题的情况下提高速度。

简而言之,我希望 scrollToPositionWithOffset 能帮到我。 但是,我不知道如何访问该方法。

您需要投射从RecyclerView.getLayoutManager()返回的LayoutManager

(recyclerview.layoutManager as LinearLayoutManager).scrollToPositionWithOffset

方法如下:

recyclerView.apply { 
      
    (layoutManager as LinearLayoutManager).scrollToPositionWithOffset(itemPosition, offsetValue)

}

请注意,如果您的 list/recycleView 具有水平方向,则offsetValue可能是X,如果您的 list/recycleView 具有垂直方向,则offsetValue可能是Y。

为了为其他答案提供更多上下文, scrollToPositionWithOffset()<\/code>不是 LayoutManager (基类)的方法,而是 LinearLayoutManager (及其子类)之一。 我的假设是这里的推理是这样的方法不一定适用于其他 LayoutManagers(或可能是模棱两可的)。 假设我们有一个更“异国情调”的布局管理器,它不会将项目组织为简单的列表,而是以圆形的形式。 在这种情况下,偏移量应该怎么做? 它是否代表要添加到滚动条上的额外弧度\/度数? 或者更确切地说是别的什么?

然而,对于 LinearLayoutManager(和任何派生类),偏移量应该做什么是相当清楚的。 如果我错了,请纠正我,但我认为这就是为什么只有 LinearLayoutManagers 可以访问该方法,因此需要 RecyclerView 的 LayoutManager 的强制转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM