Nic*_*Nic 2 java android android-arrayadapter android-recyclerview
我有一个RecyclerView
显示字符串的垂直列表:
Row0
Row1
Row2
Row3
Row4
...
Run Code Online (Sandbox Code Playgroud)
我正在使用该函数recyclerView.scrollToPosition(position);
跳转到一行。但是,我想要跳转到的行最终位于视图的底部!
例如,如果我这样做,recyclerView.scrollToPosition(17);
我会得到:
Row13
Row14
Row15
Row16
Row17 <--- 17 is at bottom (last visible row)
Run Code Online (Sandbox Code Playgroud)
我想要的是:
Row17 <-- 17 to be on top (first visible row)
Row18
Row19
Row20
Row21
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
默认行为.scrollToPosition()
是一旦您滚动到的行显示在屏幕上就停止滚动。您可以使用scrollToPositionWithOffset()
固定偏移量,以便其总和为滚动值。
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (layoutManager != null) {
layoutManager.scrollToPositionWithOffset(position, 20);
}
Run Code Online (Sandbox Code Playgroud)
更新
如何计算偏移值?我的 RecyclerView 中的每一行都有不同的高度。我也不知道如何衡量它。
现在,您可以计算屏幕上第一个和最后一个可见项目之间的差异,并且仅当屏幕上最后一个可见项目是您要首先推送到的当前项目时,这才有效。
layoutManager.scrollToPosition(position));
int firstItemPosition = ((LinearLayoutManager) recyclerview.getLayoutManager())
.findFirstCompletelyVisibleItemPosition();
int lastItemPosition = ((LinearLayoutManager) recyclerview.getLayoutManager())
.findLastCompletelyVisibleItemPosition();
layoutManager.scrollToPositionWithOffset(position,
Math.abs(lastItemPosition - firstItemPosition));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
617 次 |
最近记录: |