我正在使用带有GridLayoutManager的基本恢复视图。我观察到平滑ScrollToPopse和scrollToPoplace都不能正常工作。
a)当使用SmashScrollToPopse
时,我经常收到来自RecyclerView
的错误
"RecyclerView︰平滑滚动时越过目标位置。"
和RecyclerView
没有正确滚动(通常它会错过目标行)。这主要是在我尝试滚动到某一行的第一项时观察到的
b)当使用scrollToPopse
时,它似乎工作得很好,但大多数情况下我只能看到行的第一项,其余的不显示。
你能给我一些提示,如何使工作正常的至少一个方法?
非常感谢!
终于我能够让它工作了!LinearLayoutManager. scrollToPositionWellOffset(int,int)
做到了。
我也有同样的问题,但设法通过自定义SmoothScroller解决了这个问题
让自定义布局管理器如下
public class CustomLayoutManager extends LinearLayoutManager {
private static final float MILLISECONDS_PER_INCH = 50f;
private Context mContext;
public CustomLayoutManager(Context context) {
super(context);
mContext = context;
}
@Override
public void smoothScrollToPosition(RecyclerView recyclerView,
RecyclerView.State state, final int position) {
LinearSmoothScroller smoothScroller =
new LinearSmoothScroller(mContext) {
//This controls the direction in which smoothScroll looks
//for your view
@Override
public PointF computeScrollVectorForPosition
(int targetPosition) {
return CustomLayoutManager.this
.computeScrollVectorForPosition(targetPosition);
}
//This returns the milliseconds it takes to
//scroll one pixel.
@Override
protected float calculateSpeedPerPixel
(DisplayMetrics displayMetrics) {
return MILLISECONDS_PER_INCH/displayMetrics.densityDpi;
}
};
smoothScroller.setTargetPosition(position);
startSmoothScroll(smoothScroller);
}
}
(在上面给出的代码中留档注释)请将上述LayoutManager设置为回收视图
CustomLayoutManagerlayoutManager = new CustomLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
recyclerView.smoothScrollToPosition(position);
通过使用自定义布局管理器
scrollToPoplace在我的情况下也可以很好地使用
recyclerView.scrollToPosition(position)
此外,如果您想调整平滑ScrollToPopse的速度,请覆盖
private static final float MILLISECONDS_PER_INCH = 50f;
在CustomLayoutManager中。因此,如果我们将值设为1f,平滑ScrollToPoence会更快,就像scrollToPosion一样。增加值会延迟,减少会使滚动速度加快。希望这会有用。
在我的情况下,
mRecyclerView.scrollToPosition(10);
也没有工作。但是
mRecyclerView.smoothScrollToPosition(10);
对我来说很好…