我的活动中有一个RecyclerView,并附有一个LinearSnapHelper:
TimePickerAdapter timePickerAdapter = new TimePickerAdapter(hours);
recyclerView = (RecyclerView) root.findViewById(R.id.recycler_view);
final SnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
问题在于,当我想最初滚动到特定项目时,不会触发快照帮助程序来附加项目(请参阅图像):
recyclerView.getLayoutManager().scrollToPosition(timePickerAdapter.getCurrentPosition());
当我用手滚动时,它开始按预期工作。 任何解决方案吗?
答案 0 :(得分:4)
SnapHelper
依靠RecyclerView.OnFlingListener#onFling()
或RecyclerView.OnScrollListener#onScrollStateChanged(recyclerView, RecyclerView.SCROLL_STATE_IDLE)
来触发快照操作。
但scrollToPosition()
不会在回调之上跳转。您可以在smoothScrollBy(1, 0)
之后调用scrollToPosition()
来触发SnapHelper
滚动。
答案 1 :(得分:0)
我刚遇到同样的问题 - 对我来说使用recyclerView.smoothScrollToPosition(pos)
代替recyclerView.scrollToPosition(pos)
做了诀窍
答案 2 :(得分:0)
如果项目之间的宽度和空间相同,您可以使用它进行初始滚动
recyclerView.apply {
post {
val dx = initialPosition * (itemWidth + itemSpace)
scrollBy(dx, 0)
}
}