- (Smooth)ScrollToPosition не работает должным образом с RecyclerView
- 6 ответов
- (Smooth) ScrollToPosition не работает должным образом с RecyclerView
- How to scroll to the bottom of a RecyclerView? scrollToPosition doesn’t work
- 25 Answers 25
- Как прокрутить до нижней части RecyclerView? scrollToPosition не работает
- RecyclerView: scrollToPosition не работает
- 4 ответа
(Smooth)ScrollToPosition не работает должным образом с RecyclerView
Я использую базовый RecyclerView с GridLayoutManager. Я заметил, что ни smoothScrollToPosition ни scrollToPosition работает правильно.
a) при использовании smoothScrollToPosition Я часто получаю ошибку RecyclerView
«RecyclerView» прошел через целевую позицию при плавной прокрутке.»
и RecyclerView прокручивается неправильно (часто он пропускает целевую строку). Это наблюдается в основном, когда я пытаюсь прокрутить до 1-го пункта некоторых row
b) при использовании scrollToPosition это, кажется, вполне нормально работать, но большую часть времени я вижу только 1-й элемент строки, а остальные не отображаются.
можете ли вы дать мне несколько советов, как заставить работать правильно хотя бы один из методов?
6 ответов
наконец-то я смог заставить его работать! LinearLayoutManager.scrollToPositionWithOffset(int, int) сделал свое дело.
у меня также есть такая же проблема, но мне удалось исправить эту проблему, настроив SmoothScroller
пусть пользовательский LayoutManager, как показано ниже
(документация прокомментирована внутри кода, приведенного выше)пожалуйста, установите вышеуказанный LayoutManager в recyerview
С помощью пользовательского макета менеджер
scrollToPosition также хорошо работает в моем случае вы можете использовать
также, если вы хотите отрегулировать скорость smoothScrollToPosition пожалуйста, переопределите
в CustomLayoutManager. Поэтому, если мы поставим значение как 1f smoothScrollToPosition будет быстрее, как scrollToPosition.увеличение значения делает задержку и уменьшение сделает скорость прокрутки. Надеюсь, это будет полезно.
Источник
(Smooth) ScrollToPosition не работает должным образом с RecyclerView
Я использую базовый RecyclerView с GridLayoutManager. Я заметил, что ни smoothScrollToPosition, ни scrollToPosition не работают должным образом.
smoothScrollToPosition ) при использовании smoothScrollToPosition я часто получаю ошибку от RecyclerView
«RecyclerView: пройденное положение цели при плавной прокрутке».
И RecyclerView не прокручивается должным образом (часто он пропускает целевую строку). Это наблюдается в основном, когда я пытаюсь прокрутить до 1-го элемента некоторой строки
Б) при использовании scrollToPosition он работает нормально, но большую часть времени я вижу только первый элемент строки, а остальные не отображаются.
Можете ли вы дать мне несколько советов, как правильно работать, по крайней мере, один из методов?
Наконец, я смог заставить его работать! LinearLayoutManager.scrollToPositionWithOffset(int, int) сделал трюк.
У меня тоже такая же проблема, но мне удалось исправить эту проблему, настроив SmoothScroller
Пусть Custom LayoutManager, как показано ниже
(Документация прокомментирована внутри приведенного выше кода). Установите вышеописанный LayoutManager для повторного просмотра
С помощью настраиваемого менеджера макетов
ScrollToPosition также хорошо работает в моем случае, вы можете использовать
Также, если вы хотите настроить скорость smoothScrollToPosition, пожалуйста, переопределите
В CustomLayoutManager. Поэтому, если мы поместим значение как 1f, то smoothScrollToPosition будет быстрее, чем scrollToPosition.increasing значение make delay и убывание сделает скорость прокрутки. Надеюсь, это будет полезно.
Чтобы прокрутить вниз до любой позиции в RecyclerView, нажмите EditText.
Тоже не работает. Но
Отлично работает для меня …
Вызов recyclerView smoothScroll неэффективен, так как сам recyclerView не обрабатывает его макет.
То, что вы должны сделать, это вызов метода прокрутки менеджера компоновки вместо этого.
Это должно выглядеть примерно так
Попробуйте измерить ширину или высоту элемента и вызовите smoothScrollBy (int dx, int dy).
Источник
How to scroll to the bottom of a RecyclerView? scrollToPosition doesn’t work
I’d like to scroll to the bottom of the RecyclerView list after loading the activity.
conversationView.scrollTo(. ) throws an exception about being not supported in RecyclerView, and conversationView.scrollToPosition(. ) doesn’t seem to do anything.
After the above block of code, I added
which doesn’t work. There are 30 elements in GENERIC_MESSAGE_LIST .
25 Answers 25
I was looking at this post to find the answer but. I think everyone on this post was facing the same scenario as me: scrollToPosition() was fully ignored, for an evident reason.
What I was using?
. what WORKED?
Just set setStackFromEnd=true or setReverseLayout=true so that LLM will layout items from end.
The difference between these two is that setStackFromEnd will set the view to show the last element, the layout direction will remain the same. (So, in an left-to-right horizontal Recycler View, the last element will be shown and scrolling to the left will show the earlier elements)
Whereas setReverseLayout will change the order of the elements added by the Adapter. The layout will start from the last element, which will be the left-most in an LTR Recycler View and then, scrolling to the right will show the earlier elements.
Источник
Как прокрутить до нижней части RecyclerView? scrollToPosition не работает
Я хочу прокрутить список в списке RecyclerView после загрузки активности.
conversationView.scrollTo(. ) выдает исключение из-за того, что не поддерживается в RecyclerView, а conversationView.scrollToPosition(. ) ничего не делает.
После вышеописанного блока кода я добавил
который не работает. В GENERIC_MESSAGE_LIST есть 30 элементов.
Просто установите setStackFromEnd=true или setReverseLayout=true , чтобы LLM закончил элементы макета.
Разница между этими двумя заключается в том, что setStackFromEnd установит представление для отображения последнего элемента, направление макета останется прежним. (Таким образом, в горизонтальном представлении Recycler влево-вправо будет показан последний элемент, а прокрутка влево отобразит предыдущие элементы)
В то время как setReverseLayout изменит порядок элементов, добавленных адаптером. Макет будет начинаться с последнего элемента, который будет самым левым в LTR Recycler View, а затем, прокручивая вправо, отобразит более ранние элементы.
Я искал этот пост, чтобы найти ответ, но… Я думаю, что все в этом посте сталкивались с тем же сценарием, что и я: scrollToPosition() был полностью проигнорирован по очевидной причине.
Что я использовал?
… что РАБОТАЕТ?
Я знаю, что он опоздал, чтобы ответить здесь, но если кто-то хочет знать решение ниже
Для прокрутки из любой позиции в recyclerview до нижней
Когда вы вызываете setAdapter , это не сразу выставляет и позиционирует элементы на экране (который принимает один проход макета), поэтому ваш вызов scrollToPosition() не имеет фактических элементов для прокрутки, когда вы его вызываете.
Вместо этого вы должны зарегистрировать ViewTreeObserver.OnGlobalLayoutListener (через addOnGlobalLayoutListner() из ViewTreeObserver , созданного conversationView.getViewTreeObserver() ), который задерживает ваш scrollToPosition() до тех пор, пока не пройдет первый макет:
Добавьте этот код после отправки сообщения и до получения сообщения с сервера
выше код работает, но он не гладкий и не крутой.
ЕСЛИ у вас есть адаптер, подключенный с помощью recyclerView, просто сделайте это.
В моем случае, когда представления не имеют одинаковую высоту, вызов scrollToPosition в LayoutManager работал для того, чтобы действительно прокрутить до конца и полностью увидеть последний элемент:
Решение для Котлина:
применять нижеприведенный код после установки “recyclerView.adapter” или после “recyclerView.adapter.notifyDataSetChanged()”
Ответ Roc – отличная помощь. Я хотел бы добавить к нему небольшой блок:
Это отлично работает для меня:
Только ответ Яна смог сделать мой RecyclerView прокруткой до указанной позиции. Тем не менее, RecyclerView не смог прокручивать потом, когда я использовал scrollToPosition() . smoothScrollToPosition() работал, но первоначальная анимация сделала слишком медленным, когда список был длинным.
Причина в том, что слушатель не был удален. Я использовал код ниже, чтобы удалить текущий ViewTreeObserver , и он работал как прелесть.
этот код даст вам последнее сообщение первым, я думаю, что этот ответ полезен.
Пробовал метод @galex, он работал до рефакторинга. Поэтому я использовал ответ @yanchenko и немного изменился. Вероятно, это потому, что я вызвал прокрутку из onCreateView() , где было построено представление фрагментов (и, вероятно, не имело правильного размера).
Вы также можете добавить проверку viewTreeObserver.isAlive как в qaru.site/questions/18473/….
Прокрутка в первый раз при первом входе в представление рециркулятора, а затем используйте linearLayoutManager.scrollToPositionWithOffset(messageHashMap.size() -1, для прокрутки вниз для прокрутки вверх положите положительное значение в минус);
если вид очень большой по высоте, то для верхней части вида используется конкретное смещение scrolltoposition, тогда вы используете
Источник
RecyclerView: scrollToPosition не работает
У меня есть простой проект, отображающий текстовые сообщения пользователей. В настоящее время я не могу прокрутить RecyclerView до последнего полученного текстового сообщения.
Мой recyclerView находится внутри очень простого действия с использованием макета координатора:
Действие загружает данные через базовый загрузчик. Я форсирую доступ к recyclerview в потоке пользовательского интерфейса и с задержкой (на всякий случай)
Когда я запускаю этот код, RecyclerView полностью заполняется. Через секунду у меня есть правильный журнал, но вид не изменился. Я уже нашел различные ответы на эту проблему, но ни один из них, похоже, не работает в моем случае.
Прокрутка в RecyclerView отлично работает.
4 ответа
Вы использовали layoutManager.setReverseLayout(true) и layoutManager.setStackFromEnd(true) , чтобы начать свой список с конца. Итак, если я правильно понимаю, список теперь начинается с позиции adapter.getItemCount() — 1 , и ваш список не должен прокручиваться. Может, тебе стоит попробовать . scrollToPosition(0) .
Моя проблема заключалась в том, что мой RecyclerView находился внутри NestedScrollView . Я удалил NestedScrollView, и scrollToPosition () работал.
Вдохновленный @ omid-jafarinezhad, мне нужно использовать smoothScrollToPosition , но мне все равно нужно мгновенное прокрутка до конец, потому что это будет выглядеть странно, если продолжать медленно прокручивать много элементов. И мой обходной путь — использовать оба метода последовательно, то есть:
Это может показаться взломом, но, по крайней мере, решите мою проблему на данный момент.
У меня такая же проблема, и метод smoothScrollToPosition ее решает:
Источник