问题描述
RecyclerView.scrollToPosition()
非常奇怪。
例如,假设一个名为"rv"
的RecyclerView
。
如果现在第 10 项在当前
RecyclerView
,请调用rv.scrollToPosition(10)
,RecyclerView
会将第 10 项滚动到底部。如果现在第 10 项在当前
RecyclerView
,调用rv.scrollToPosition(10)
,不会有任何滚动,什么也不会做。如果现在 item 10 在当前
RecyclerView
的顶部,调用rv.scrollToPosition(10)
,RecyclerView
会将 item 10 滚动到顶部。
为了帮助理解,请看这张图
但是我需要的是,每当我调用它时, RecyclerView
都会像案例 3 一样将假定的位置滚动到当前视图的顶部。如何做到这一点?
1楼
如果我理解这个问题,您想滚动到特定位置,但该位置是适配器的位置,而不是RecyclerView
的项目位置。
您只能通过LayoutManager
实现这一点。
做类似的事情:
rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
2楼
下面的链接可能会解决您的问题:
只需创建一个带有首选项 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);
3楼
如果要滚动到特定位置并且该位置是适配器的位置,则可以使用StaggeredGridLayoutManager
scrollToPosition
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
staggeredGridLayoutManager.scrollToPosition(10);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
4楼
这是 Kotlin 代码片段,但您可以正确地按位置滚动到项目。 重点是为布局管理器声明成员变量并使用其方法进行滚动。
lateinit var layoutManager: LinearLayoutManager
fun setupView() {
...
layoutManager = LinearLayoutManager(applicationContext)
mainRecyclerView.layoutManager = layoutManager
...
}
fun moveToPosition(position: Int) {
layoutManager.scrollToPositionWithOffset(position, 0)
}
5楼
尝试recycler_view.smoothScrollBy(0, 100);
这里0表示x-coordinate
和100代表y-coordinate
我在垂直recyclerView,我想滚动到垂直列表下一个位置,并为即将到来以前的位置,我只是代替100 -100使用该