Как отключить прокрутку recyclerview при перемещении наблюдаемого элемента - PullRequest
0 голосов

Когда у меня есть первый элемент просмотра ресайклера в позиции 0, а затем, скажем, 10 элементов вставляются в позицию 0, делая первый go в позицию 10, вид ресайклера прокручивается в позицию 10. Как отключить эту функцию, чтобы вид ресайклера оставался включенным наверх?

У меня есть возможный ответ ниже, но в нем есть недостатки. При таком подходе recyclerview действительно будет прокручиваться вверх, но только после прокрутки до конца. И это немного раздражает. Кто-нибудь знает, как сделать так, чтобы он оставался на высоте, не доходя до конца?

1 Ответ

0 голосов

Один из способов обхода проблемы - зарегистрировать AdapterDataObserver в адаптере представления ресайклера, переопределив метод onItemRangeInserted, как в следующем коде. Когда что-то вставляется в позицию 0, он автоматически запускает layoutManager для прокрутки до начала списка.

С этим подходом recyclerview действительно будет прокручиваться вверх, но только после прокрутки до конца. И это немного раздражает. Кто-нибудь знает, как сделать так, чтобы оно оставалось на вершине, не доходя до конца?

adapter?.registerAdapterDataObserver(object: RecyclerView.AdapterDataObserver() {
                override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
                    if (positionStart == 0) layoutManager?.scrollToPosition(0)
                }
            })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...