gpt4 book ai didi

java - RecyclerView的scrollToPosition()将项目放在底部。我怎样才能到达顶部?

转载 作者:行者123 更新时间:2023-12-05 00:16:02 27 4
gpt4 key购买 nike

我有一个RecyclerView,它显示垂直的字符串列表:

Row0
Row1
Row2
Row3
Row4
...

我正在使用函数recyclerView.scrollToPosition(position);跳转到一行。但是,我想要跳转到的行最终出现在 View 的底部!

例如,如果我执行 recyclerView.scrollToPosition(17); 我得到:

Row13
Row14
Row15
Row16
Row17 <--- 17 is at bottom (last visible row)

我想要的是:

Row17  <-- 17 to be on top (first visible row)
Row18
Row19
Row20
Row21

我怎样才能实现这个目标?

最佳答案

.scrollToPosition() 的默认行为是在您滚动到的行显示在屏幕上后停止滚动。您可以使用scrollToPositionWithOffset()具有固定的偏移量,以便其总和为滚动值。

LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (layoutManager != null) {
layoutManager.scrollToPositionWithOffset(position, 20);
}

更新

how can I compute the offset value? Each row in my RecyclerView has a different height. Also I don't see how to measure it.

现在,您可以计算屏幕上第一个和最后一个可见项目之间的差异,并且仅当屏幕上最后一个可见项目是您要首先推送到的当前项目时,该计算才有效。

layoutManager.scrollToPosition(position));

int firstItemPosition = ((LinearLayoutManager) recyclerview.getLayoutManager())
.findFirstCompletelyVisibleItemPosition();

int lastItemPosition = ((LinearLayoutManager) recyclerview.getLayoutManager())
.findLastCompletelyVisibleItemPosition();

layoutManager.scrollToPositionWithOffset(position,
Math.abs(lastItemPosition - firstItemPosition));

关于java - RecyclerView的scrollToPosition()将项目放在底部。我怎样才能到达顶部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62628746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com