Ответ 1
Добавьте эту строку в свой макет. Xml
android:overScrollMode="never"
РЕДАКТИРОВАТЬ:
Другой способ прокрутки recycleview
recyclerView.smoothScrollToPosition(position);
Раньше, когда я хочу прокрутить ListView
до желаемой позиции, я буду использовать
listView.setSelection(row);
ListView
будет прокручиваться без какой-либо анимации - Android List View задает позицию по умолчанию без анимации
Теперь я хочу добиться такого же эффекта для RecyclerView
. Я пытаюсь выполнить
((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(row, 0);
Тем не менее, есть прокрутка анимации, которую я бы хотел избежать.
Есть ли способ, которым я могу выполнять программную прокрутку без анимации?
Это анимация, которую я имел в виду - https://youtu.be/OKsUKwBLoks
Заметьте, я уже пробовал следующие способы. Все они создают анимацию.
Добавьте эту строку в свой макет. Xml
android:overScrollMode="never"
РЕДАКТИРОВАТЬ:
Другой способ прокрутки recycleview
recyclerView.smoothScrollToPosition(position);
Я знаю, что немного опоздал с этим ответом, но это может помочь кому-то другому. Попробуйте следовать (по крайней мере, я не мог видеть анимацию при ее использовании):
//-- 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);
}
});
Вы можете прокручивать без анимации с помощью:
recyclerView.scrollToPosition(position)
Это можно легко переделать, когда вы вызываете notifyItemInserted()
с помощью scrollToPosition()
в одно и то же время.
Анимация вызвана DefaultItemAnimator
в классе анимации DefaultItemAnimator
по умолчанию RecyclerView.
Я нашел видео Youtube, которое перепрограммировало проблему другим человеком.
И у меня тоже есть решение:
scrollToPosition()
.notifyItemInserted()
вызываем notifyItemInserted()
и scrollToPosition()
. У меня есть пример кода, но он написан в c#, но он делает то же самое с kotlin с лямбда-выражением. Если вам нужен доступ к 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);