以前,当我想将ListView
滚动到所需位置时,我会使用
listView.setSelection(row);
ListView
将滚动而不显示任何动画 - Android List View set default position without animation
现在,我想在RecyclerView
上达到同样的效果。我尝试执行
((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(row, 0);
然而,有滚动动画,我想避免。
有没有办法可以在没有动画的情况下以编程方式滚动?
这是我想要的动画 - https://youtu.be/OKsUKwBLoks
注意,我已经尝试过以下方法。所有这些都会生成动画。
答案 0 :(得分:3)
在layout.xml中添加此行
android:overScrollMode="never"
修改强>
滚动recycleview的另一种方法
recyclerView.smoothScrollToPosition(position);
答案 1 :(得分:2)
我知道我对这个答案有些迟了,但它可能会对其他人有所帮助。 尝试执行以下操作(至少在使用时看不到任何动画):
//-- Immediately jump to the position in RecyclerView without delay or animation.
mRecyclerView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
mRecyclerView.scrollToPosition(position)
mRecyclerView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
mRecyclerView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mRecyclerView.scrollToPosition(position);
mRecyclerView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
答案 2 :(得分:1)
您可以在不使用动画的情况下滚动:
recyclerView.scrollToPosition(position)
答案 3 :(得分:0)
当您同时使用notifyItemInserted()
致电scrollToPosition()
时,可以轻松重新生成此内容。
动画是由RecyclerView默认项目动画类中的DefaultItemAnimator
引起的。
我发现Youtube video重新产生了其他人的问题。
我也有解决方案:
scrollToPosition()
滚动到上一个位置。notifyItemInserted()
和scrollToPosition()
。我有代码示例,但用c#编写,但它与kotlin的lambda表达式相同。如果您需要访问Adapter内的RecyclerView,您可能需要查看Adapter.onAttachedToRecyclerView()
。
if (Adapter.ListData.Count > 2) Adapter.RecyclerView.ScrollToPosition(Adapter.ListData.Count - 1);
Adapter.RecyclerView.PostDelayed(() =>
{
Adapter.ListData.Add(new ItemSimplyfiedAdapter.Standard
{
//Some new item inserting into data set.
});
Adapter.NotifyItemInserted(Adapter.ListData.Count - 1);
Adapter.RecyclerView?.ScrollToPosition(Adapter.ListData.Count - 1);
}, 100);