【问题标题】:Kotlin/RecyclerView: scrollToPositionWithOffset Not Showing UpKotlin/RecyclerView:scrollToPositionWithOffset 未显示
【发布时间】:2018-09-25 18:20:45
【问题描述】:

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

一点背景:

图像中的第一行(scrollToPosition)正在滚动 RecyclerView 以使位置(在本例中为 50)可见 - 这通常意味着所选位置显示在底部可见的 RecyclerView (位置 50 在“滚动”后首先变为可见)。而我想始终将其显示在顶部。根据我的研究,一个解决方案似乎是使用这种scrollToPositionWithOffset 方法(Scroll RecyclerView to show selected item on top

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

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

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    您需要转换从RecyclerView.getLayoutManager() 返回的LayoutManager

    (recyclerview.layoutManager as LinearLayoutManager).scrollToPositionWithOffset

    【讨论】:

    • 谢谢。有用。有谁知道为什么需要这种铸造才能工作?
    【解决方案2】:

    方法如下:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-30
        • 2021-06-18
        相关资源
        最近更新 更多