Отключить прокрутку recycler view android

Как отключить прокрутку RecyclerView?

Я не могу отключить прокрутку в RecyclerView . Я попытался позвонить rv.setEnabled(false) , но все еще могу прокручивать.

Как отключить прокрутку?

30 ответов

Для этого вам следует переопределить layoutmanager вашего recycleview. Таким образом будет отключена только прокрутка, ни одна из других функций. Вы по-прежнему сможете обрабатывать щелчки или любые другие события касания. Например:-

Оригинал:

Здесь, используя флаг «isScrollEnabled», вы можете временно включить / отключить функцию прокрутки вашего повторного просмотра.

Также:

Просто переопределите существующую реализацию, чтобы отключить прокрутку и разрешить щелчок.

Я знаю, что у этого уже есть принятый ответ, но решение не учитывает случай использования, с которым я столкнулся.

Мне особенно нужен элемент заголовка, который по-прежнему можно было щелкнуть, но отключил механизм прокрутки RecyclerView. Это можно сделать с помощью следующего кода:

в XML: —

В XML-файле дочернего макета RecyclerView

в Java: —

В ваш RecyclerView в Java-коде.

Использование ViewCompat (Java): —

childRecyclerView.setNestedScrollingEnabled(false); будет работать только на устройствах android_version> 21 . для работы на всех устройствах используйте следующие

Расширьте LayoutManager и переопределите canScrollHorizontally() и canScrollVertically() , чтобы отключить прокрутку.

Имейте в виду, что вставка элементов в начало не приведет к автоматической прокрутке назад к началу, чтобы обойти это, сделайте что-то вроде:

В Kotlin, если вы не хотите создавать дополнительный класс только для установки одного значения, вы можете создать анонимный класс из LayoutManager:

Другой альтернативой является setLayoutFrozen , но она имеет ряд других побочных эффектов.

Написал котлинскую версию:

Есть действительно простой ответ.

Приведенный выше код отключает вертикальную прокрутку RecyclerView.

Поскольку setLayoutFrozen устарел, вы можете отключить прокрутку, заморозив RecyclerView с помощью suppressLayout .

Если вы просто отключите только функцию прокрутки для RecyclerView , вы можете использовать метод setLayoutFrozen(true); для RecyclerView . Но отключить сенсорное событие нельзя.

Создайте класс, расширяющий класс RecyclerView .

Это отключит событие прокрутки, но не события щелчка.

Используйте это в своем XML, сделайте следующее:

Вы можете отключить прокрутку, заморозив RecyclerView.

Чтобы заморозить: recyclerView.setLayoutFrozen(true)

Чтобы разморозить: recyclerView.setLayoutFrozen(false)

Это работает для меня:

Это немного хакерский обходной путь, но он работает; вы можете включить / отключить прокрутку в RecyclerView .

Это пустой RecyclerView.OnItemTouchListener , захватывающий каждое событие касания, что приводит к отключению цели RecyclerView .

НАСТОЯЩИЙ РЕАЛЬНЫЙ ответ: Для API 21 и выше:

Код Java не требуется. Вы можете установить android:nestedScrollingEnabled=»false» в xml:

Дополнительная информация в документации

Чтобы остановить прокрутку прикосновением, но продолжайте прокрутку с помощью команд:

Для тех, кто хочет просто запретить пользователю прокручивать RecyclerView, не теряя smoothScrollToPosition или любой другой метод «перехода в позицию», я бы рекомендовал расширить класс RecyclerView , переопределив onTouchEvent . Как это:

Вам нужно просто добавить эту строку:

Существует более простой способ отключить прокрутку (технически это скорее перехват события прокрутки и его завершение при выполнении условия) с использованием стандартных функций. RecyclerView имеет метод под названием addOnScrollListener(OnScrollListener listener) , и с его помощью вы можете остановить его прокрутку, вот так:

Пример использования: Предположим, вы хотите отключить прокрутку при нажатии на один из элементов внутри RecyclerView , чтобы вы могли выполнять с ним некоторые действия, не отвлекаясь на случайную прокрутку к другому элементу, а когда вы закончите с ним, просто щелкните элемент еще раз, чтобы включить прокрутку. Для этого вам нужно прикрепить OnClickListener к каждому элементу в RecyclerView , чтобы при нажатии на элемент он переключал isItemSelected с false на <>. Таким образом, когда вы пытаетесь прокрутить, RecyclerView автоматически вызовет метод onScrollStateChanged , а поскольку для isItemSelected установлено значение true , он немедленно остановится, прежде чем RecyclerView получит шанс, ну . прокрутить.

Примечание: для удобства использования попробуйте использовать GestureListener вместо OnClickListener , чтобы предотвратить accidental кликов.

Наткнулся на фрагмент, содержащий несколько RecycleView, поэтому мне нужна только одна полоса прокрутки вместо одной полосы прокрутки в каждом RecycleView.

Поэтому я просто помещаю ScrollView в родительский контейнер, содержащий 2 RecycleView, и использую android:isScrollContainer=»false» в RecycleView.

Вот как я сделал это с привязкой данных:

Читайте также:  Навител для андроида кряк для андроид

Вместо «истины» я использовал логическую переменную, которая изменялась в зависимости от условия, чтобы представление ресайклера переключалось между отключенным и включенным.

В методе действия onCreate вы можете просто сделать:

И он перестает прокручиваться.

В вашем дочернем элементе SrollView или NestedScrollView (и родительском элементе ListView, recyclerview и gridview любого)

Просто добавьте это в свою корзину в xml

Я боролся с этой проблемой в течение некоторого часа, поэтому я хотел бы поделиться своим опытом. Для решения layoutManager это нормально, но если вы хотите повторно включить прокрутку, ресайклер вернется наверх.

Лучшее решение на данный момент (по крайней мере для меня) — использовать метод @Zsolt Safrany, но добавить геттер и сеттер, поэтому вам не нужно удалять или добавлять OnItemTouchListener.

Вы можете добавить эту строку после настройки вашего адаптера

Теперь ваш recyclerview будет работать с плавной прокруткой

Переопределите onTouchEvent () и onInterceptTouchEvent () и верните false, если вам вообще не нужен OnItemTouchListener. Это не отключает OnClickListeners для ViewHolders.

По какой-то причине ответ @Alejandro Gracia начинает работать только через несколько секунд. Я нашел решение, которое мгновенно блокирует RecyclerView:

Источник

Как отключить прокрутку RecyclerView?

Я не могу отключить прокрутку в RecyclerView . Я попытался вызвать rv.setEnabled(false) но я все еще могу прокручивать.

Как отключить прокрутку?

Для этого вы должны переопределить layoutmanager вашего recycleview. Таким образом, он будет отключать прокрутку, ни одну из других функций. Вы по-прежнему сможете обрабатывать клики или любые другие события касания. Например:-

Оригинал:

Здесь, используя флаг isScrollEnabled, вы можете временно включать / отключать функции прокрутки вашего временного цикла.

Также:

Просто переопределите существующую реализацию, чтобы отключить прокрутку и разрешить щелчок.

Дополнительная информация в документации

Это немного хакерское решение, но оно работает; Вы можете включить / отключить прокрутку в RecyclerView .

Это пустой RecyclerView.OnItemTouchListener крадущий каждое событие касания, таким образом отключая целевой RecyclerView .

Это работает для меня:

Расширьте LayoutManager и переопределите canScrollHorizontally() и canScrollVertically() чтобы отключить прокрутку.

Имейте в виду, что вставка элементов в начале не будет автоматически прокручиваться назад до начала, чтобы обойти это:

Другой альтернативой является setLayoutFrozen , но он поставляется с рядом других побочных эффектов.

Я знаю, что у этого уже есть принятый ответ, но решение не учитывает прецедент, с которым я столкнулся.

Мне определенно нужен элемент заголовка, который по-прежнему доступен для кликов, но отключил механизм прокрутки RecyclerView. Это может быть выполнено с помощью следующего кода:

Вы также можете установить android:nestedScrollingEnabled=»false» в xml:

Почему-то ответ @Alejandro Gracia начинает работать только через несколько секунд. Я нашел решение, которое мгновенно блокирует RecyclerView:

Создать класс, который расширяет класс RecyclerView

Это отключит событие прокрутки, но не события кликов

Используйте это в своем XML, чтобы сделать следующее:

Переопределите onTouchEvent () и onInterceptTouchEvent () и верните false, если вам вообще не нужен OnItemTouchListener. Это не отключает OnClickListeners ViewHolders.

Я боролся в этой проблеме в течение некоторого часа. Поэтому я хотел бы поделиться своим опытом. Для решения layoutManager это нормально, но если вы хотите повторно использовать прокрутку, то переработчик вернется к началу.

Лучшее решение пока (для меня, по крайней мере) использует метод @Zsolt Safrany, но добавляет getter и setter, поэтому вам не нужно удалять или добавлять OnItemTouchListener.

Вот как я это сделал с привязкой данных:

Вместо «true» я использовал логическую переменную, которая была изменена в зависимости от состояния, так что просмотр recycler переключился бы между отключением и включением.

Источник

Как отключить прокрутку RecyclerView?

Я не могу отключить прокрутку в RecyclerView . Я пытался дозвониться rv.setEnabled(false) но я все еще можете прокручивать.

Как отключить прокрутку?

21 ответов

вы должны переопределить layoutmanager вашего recycleview для этого. Таким образом, он отключит только прокрутку, ни одну из других функций. Вы по-прежнему сможете обрабатывать щелчок или любые другие события касания. Например:-

Оригинал:

здесь, используя флаг «isScrollEnabled», вы можете временно включить/отключить функцию прокрутки вашего recycle-view.

также:

простое переопределение существующей реализации отключить прокрутку и разрешить щелчок.

Это немного хакерский обходной путь, но он работает; вы можете включить/отключить прокрутку в RecyclerView .

Читайте также:  Hdmi камера для android

это пустой RecyclerView.OnItemTouchListener кража каждого события касания, таким образом, отключив цель RecyclerView .

это работает для меня:

для API 21 и выше:

не требуется код java. Вы можете установить android:nestedScrollingEnabled=»false» в xml:

создать класс, который расширит RecyclerView класс

это отключит событие прокрутки, но не события щелчка

используйте это в своем XML сделайте следующее:

расширения LayoutManager и заменить canScrollHorizontally() и canScrollVertically() отключить прокрутку.

имейте в виду, что вставка элементов в начале не будет автоматически прокручиваться назад к началу, чтобы обойти это сделать что-то вроде:

Другой альтернативой является setLayoutFrozen , но он поставляется с кучей других побочных эффектов.

Я знаю, что это уже есть принятый ответ, но решение не учитывать случай с которым я столкнулся.

мне особенно нужен элемент заголовка, который все еще был доступен для клика, но отключил механизм прокрутки RecyclerView. Это можно сделать с помощью следующего кода:

по какой-то причине @Alejandro Gracia ответ начинает работать только через несколько секунд. Я нашел решение, которое мгновенно блокирует RecyclerView:

переопределите onTouchEvent () и onInterceptTouchEvent () и верните false, если вам вообще не нужен OnItemTouchListener. Это не отключает OnClickListeners из ViewHolders.

в XML :-

вы можете добавить

в дочернем XML-файле макета RecyclerView

в Java :-

к вашему RecyclerView в коде Java.

Использование ViewCompat (Java): —

childRecyclerView.setNestedScrollingEnabled(false); будет работать только в android_version>21 устройства. для работы во всех устройствах использовать после

если вы просто отключите только функциональность прокрутки of RecyclerView затем вы можете использовать setLayoutFrozen(true); метод RecyclerView . Но это не может быть отключить событие touch.

я боролся в этом вопросе в течение некоторого часа, Поэтому я хотел бы поделиться своим опытом, Для решения layoutManager это нормально, но если вы хотите восстановить прокрутку, recycler вернется наверх.

лучшее решение до сих пор (для меня, по крайней мере) использует @Zsolt Safrany methode, но добавляет геттер и сеттер, поэтому вам не нужно удалять или добавлять OnItemTouchListener.

написал версию Котлин:

вот как я это сделал с привязкой данных:

вместо «true» я использовал логическую переменную, которая изменилась на основе условия, чтобы представление recycler переключалось между отключенным и включенным.

столкнулся с фрагментом, который содержит несколько RecycleView, поэтому мне нужна только одна полоса прокрутки вместо одной полосы прокрутки в каждом RecycleView.

поэтому я просто помещаю ScrollView в родительский контейнер, содержащий 2 RecycleViews и использую android:isScrollContainer=»false» в RecycleView

просто добавьте это в свой recycleview в xml

в вашем ребенке SrollView или NestedScrollView (и родителе ListView, recyclerview и gridview любого)

существует более простой способ отключить прокрутку, используя только стандартные функции. RecyclerView имеет метод, называемый addOnScrollListener(OnScrollListener listener) , и используя только это, вы можете остановить прокрутку, просто так:

использовать случае: Предположим, вы хотите отключить прокрутку при нажатии на один из элементов в RecyclerView таким образом, вы можете выполнять некоторые действия с ним, не отвлекаясь на случайную прокрутку до другого элемента, и когда вы закончите с это, просто нажмите на элемент еще раз, чтобы включить прокрутку. Для этого вы хотели бы прикрепить OnClickListener для каждого элемента в RecyclerView , поэтому, когда вы нажимаете на элемент, он будет переключаться isItemSelected С false to true . Таким образом, когда вы пытаетесь прокрутить, RecyclerView автоматически вызывает метод onScrollStateChanged и с isItemSelected значение true , оно остановит немедленно, перед RecyclerView есть шанс, хорошо. прокрутить.

Примечание: Для лучшего удобства использования попробуйте использовать GestureListener вместо OnClickListener в запретить accidental кликов.

Источник

Как отключить прокрутку RecyclerView?

Я не могу отключить прокрутку в RecyclerView . Я попытался позвонить, rv.setEnabled(false) но все еще могу прокрутить.

Как я могу отключить прокрутку?

Для этого вам следует переопределить макет менеджера вашего повторного просмотра. Таким образом, он только отключит прокрутку, ни одну из других функций. Вы по-прежнему сможете обрабатывать щелчки или любые другие события касания. Например:-

Оригинал:

Здесь с помощью флага «isScrollEnabled» вы можете временно включить / отключить функцию прокрутки вашего повторного просмотра.

Также:

Просто переопределите существующую реализацию, чтобы отключить прокрутку и разрешить щелчок.

Читайте также:  Как снести систему андроид до заводских настроек

Больше информации в документации

РЕАЛЬНО РЕАЛЬНО ответ: для API 21 и выше:

Код Java не требуется. Вы можете установить android:nestedScrollingEnabled=»false» в xml:

Это немного хакерский обходной путь, но он работает; Вы можете включить / отключить прокрутку в RecyclerView .

Это пустое RecyclerView.OnItemTouchListener воровство каждого сенсорного события, таким образом отключая цель RecyclerView .

Это работает для меня:

Вы можете отключить прокрутку, заморозив RecyclerView.

Создать класс, который расширяет класс RecyclerView

Это отключит событие прокрутки, но не события щелчка

Используйте это в своем XML, сделайте следующее:

Если вы просто отключить только функциональные возможности прокрутки в RecyclerView то вы можете использовать setLayoutFrozen(true); метод RecyclerView . Но нельзя отключить сенсорное событие.

Существует очень простой ответ.

Приведенный выше код отключает вертикальную прокрутку RecyclerView.

Еще одна альтернатива setLayoutFrozen , но она имеет множество других побочных эффектов.

Написал котлинскую версию:

Расширить LayoutManager и переопределить canScrollHorizontally() и canScrollVertically() отключить прокрутку.

Имейте в виду, что вставка элементов в начале не будет автоматически прокручиваться назад к началу, чтобы обойти это, сделайте что-то вроде:

Я знаю, что на это уже есть принятый ответ, но решение не учитывает вариант использования, с которым я столкнулся.

Мне особенно нужен был элемент заголовка, который можно было нажимать, но при этом отключить механизм прокрутки в RecyclerView. Это можно сделать с помощью следующего кода:

Как setLayoutFrozen не рекомендуется, Вы можете отключить прокрутку, заморозив RecyclerView с помощью suppressLayout .

в XML: —

в дочернем XML-файле макета RecyclerView

в Java: —

к вашему RecyclerView в коде Java.

Использование ViewCompat (Java): —

childRecyclerView.setNestedScrollingEnabled(false); будет работать только в android_version> 21 устройства. для работы на всех устройствах используйте следующее

По какой-то причине @Alejandro Gracia ответ начинает работать только через несколько секунд. Я нашел решение, которое мгновенно блокирует RecyclerView:

Переопределите onTouchEvent () и onInterceptTouchEvent () и верните false, если вам вообще не нужен OnItemTouchListener. Это не отключает OnClickListeners ViewHolders.

Вы можете добавить эту строку после настройки вашего адаптера

Теперь ваш переработчик будет работать с плавной прокруткой

Я боролся с этой проблемой в течение часа, поэтому я хотел бы поделиться своим опытом. Для решения layoutManager это хорошо, но если вы захотите включить прокрутку, то вернитесь к началу.

Лучшее решение (пока, по крайней мере, для меня) — это использование метода @Zsolt Safrany, но с добавлением геттера и сеттера, чтобы вам не пришлось удалять или добавлять OnItemTouchListener.

В Kotlin, если вы не хотите создавать дополнительный класс только для установки одного значения, вы можете создать анонимный класс из LayoutManager:

Вот как я это сделал с привязкой данных:

Вместо «true» я использовал логическую переменную, которая изменялась в зависимости от условия, чтобы представление рециркулятора переключалось между отключением и включением.

Столкнулся с фрагментом, который содержит несколько RecycleView, поэтому мне нужна только одна полоса прокрутки вместо одной полосы прокрутки в каждом RecycleView.

Поэтому я просто помещаю ScrollView в родительский контейнер, который содержит 2 RecycleViews, и использую его android:isScrollContainer=»false» в RecycleView.

в вашем дочернем элементе SrollView или NestedScrollView (и любой родительский элемент ListView, recyclerview и gridview любой)

Существует более простой способ отключить прокрутку (технически это скорее перехват события прокрутки и завершение его при выполнении условия), используя только стандартные функции. RecyclerView вызвал метод addOnScrollListener(OnScrollListener listener) , и с помощью этого вы можете остановить прокрутку, просто так:

Случай использования: допустим, вы хотите отключить прокрутку, когда нажимаете на один из элементов внутри, RecyclerView чтобы вы могли выполнять с ним некоторые действия, не отвлекаясь на случайную прокрутку на другой элемент, и когда вы закончите с этим, просто нажмите элемент снова, чтобы включить прокрутку. Для этого вы хотите прикрепить OnClickListener к каждому элементу внутри RecyclerView , поэтому, когда вы нажимаете на элемент, он переключается isItemSelected с false на true . Таким образом, когда вы попытаетесь прокрутить, RecyclerView автоматически вызовет метод onScrollStateChanged и, так как isItemSelected установлено значение true , он остановится немедленно, до RecyclerView возможность, ну . прокрутить.

Примечание: для удобства использования старайтесь использовать GestureListener вместо того, OnClickListener чтобы предотвращать accidental щелчки.

Источник

Оцените статью