使用SnapHelper的RecyclerView,在scrollToPosition之后不会对项目进行捕捉

时间:2016-12-22 09:48:13

标签: android android-recyclerview

我的活动中有一个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());

当我用手滚动时,它开始按预期工作。 任何解决方案吗?

enter image description here

3 个答案:

答案 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)
   }
}