当前位置: 代码迷 >> Android >> 如何使用 RecyclerView.scrollToPosition() 将位置移动到当前视图的顶部?
  详细解决方案

如何使用 RecyclerView.scrollToPosition() 将位置移动到当前视图的顶部?

热度:197   发布时间:2023-08-04 11:31:53.0

RecyclerView.scrollToPosition()非常奇怪。 例如,假设一个名为"rv"RecyclerView

  1. 如果现在第 10 项在当前RecyclerView ,请调用rv.scrollToPosition(10)RecyclerView会将第 10 项滚动到底部。

  2. 如果现在第 10 项在当前RecyclerView ,调用rv.scrollToPosition(10) ,不会有任何滚动,什么也不会做。

  3. 如果现在 item 10 在当前RecyclerView的顶部,调用rv.scrollToPosition(10)RecyclerView会将 item 10 滚动到顶部。

为了帮助理解,请看这张图

但是我需要的是,每当我调用它时, RecyclerView都会像案例 3 一样将假定的位置滚动到当前视图的顶部。如何做到这一点?

如果我理解这个问题,您想滚动到特定位置,但该位置是适配器的位置,而不是RecyclerView的项目位置。

您只能通过LayoutManager实现这一点。

做类似的事情:

rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).

下面的链接可能会解决您的问题:

只需创建一个带有首选项 SNAP_TO_START 的 SmoothScroller:

RecyclerView.SmoothScroller smoothScroller = new 
LinearSmoothScroller(context) {
   @Override protected int getVerticalSnapPreference() {
       return LinearSmoothScroller.SNAP_TO_START;
   }
};

现在您设置要滚动到的位置:

smoothScroller.setTargetPosition(position);

并将该 SmoothScroller 传递给 LayoutManager:

layoutManager.startSmoothScroll(smoothScroller);

如果要滚动到特定位置并且该位置是适配器的位置,则可以使用StaggeredGridLayoutManager scrollToPosition

   StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
   staggeredGridLayoutManager.scrollToPosition(10);
   recyclerView.setLayoutManager(staggeredGridLayoutManager);

这是 Kotlin 代码片段,但您可以正确地按位置滚动到项目。 重点是为布局管理器声明成员变量并使用其方法进行滚动。

lateinit var layoutManager: LinearLayoutManager

fun setupView() {
    ...

    layoutManager = LinearLayoutManager(applicationContext)
    mainRecyclerView.layoutManager = layoutManager

    ...
}

fun moveToPosition(position: Int) {
    layoutManager.scrollToPositionWithOffset(position, 0)
}

尝试recycler_view.smoothScrollBy(0, 100); 这里0表示x-coordinate100代表y-coordinate我在垂直recyclerView,我想滚动到垂直列表下一个位置,并为即将到来以前的位置,我只是代替100 -100使用该

  相关解决方案