Я не могу отключить прокрутку в RecyclerView
. Я попытался позвонить, rv.setEnabled(false)
но все еще могу прокрутить.
Как я могу отключить прокрутку?
android
scroll
android-recyclerview
Жолт Сафраны
источник
источник
RecyclerView
если вы не хотите прокрутки?View
поверхRecyclerView
, переключаясь междуVISIBLE
и поGONE
мере необходимости, но без маневра ваш подход кажется разумным.Ответы:
Для этого вам следует переопределить макет менеджера вашего повторного просмотра. Таким образом, он только отключит прокрутку, ни одну из других функций. Вы по-прежнему сможете обрабатывать щелчки или любые другие события касания. Например:-
Оригинал:
Здесь с помощью флага «isScrollEnabled» вы можете временно включить / отключить функцию прокрутки вашего повторного просмотра.
Также:
Просто переопределите существующую реализацию, чтобы отключить прокрутку и разрешить щелчок.
источник
Настоящий ответ
Больше информации в документации
источник
NestedScrollView
:android.support.v4.widget.NestedScrollView
как описано здесь, chessdork: stackoverflow.com/questions/37846245/…РЕАЛЬНО РЕАЛЬНО ответ: для API 21 и выше:
Код Java не требуется. Вы можете установить
android:nestedScrollingEnabled="false"
в xml:источник
Это немного хакерский обходной путь, но он работает; Вы можете включить / отключить прокрутку в
RecyclerView
.Это пустое
RecyclerView.OnItemTouchListener
воровство каждого сенсорного события, таким образом отключая цельRecyclerView
.Используй это:
источник
Это работает для меня:
источник
Custom view 'RecyclerView' has setOnTouchListener called on it but does not override performClick
return e.getAction() == MotionEvent.ACTION_MOVE;
вместо этогоreturn true;
отменяются только события прокрутки / прокрутки.Вы можете отключить прокрутку, заморозив RecyclerView.
Заморозить:
recyclerView.setLayoutFrozen(true)
Разморозить:
recyclerView.setLayoutFrozen(false)
источник
Создать класс, который расширяет класс RecyclerView
Это отключит событие прокрутки, но не события щелчка
Используйте это в своем XML, сделайте следующее:
источник
Если вы просто отключить только функциональные возможности прокрутки в
RecyclerView
то вы можете использоватьsetLayoutFrozen(true);
методRecyclerView
. Но нельзя отключить сенсорное событие.источник
источник
Существует очень простой ответ.
Приведенный выше код отключает вертикальную прокрутку RecyclerView.
источник
Еще одна альтернатива
setLayoutFrozen
, но она имеет множество других побочных эффектов.https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setLayoutFrozen(boolean)
источник
Написал котлинскую версию:
использование:
источник
Расширить
LayoutManager
и переопределитьcanScrollHorizontally()
иcanScrollVertically()
отключить прокрутку.Имейте в виду, что вставка элементов в начале не будет автоматически прокручиваться назад к началу, чтобы обойти это, сделайте что-то вроде:
источник
Я знаю, что на это уже есть принятый ответ, но решение не учитывает вариант использования, с которым я столкнулся.
Мне особенно нужен был элемент заголовка, который можно было нажимать, но при этом отключить механизм прокрутки в RecyclerView. Это можно сделать с помощью следующего кода:
источник
Как
setLayoutFrozen
не рекомендуется, Вы можете отключить прокрутку, заморозив RecyclerView с помощьюsuppressLayout
.Заморозить:
Разморозить:
источник
в XML: -
Можете добавить
android:nestedScrollingEnabled="false"
в дочернем XML-файле макета RecyclerView
или
в Java: -
childRecyclerView.setNestedScrollingEnabled(false);
к вашему RecyclerView в коде Java.
Использование ViewCompat (Java): -
childRecyclerView.setNestedScrollingEnabled(false);
будет работать только в android_version> 21 устройства. для работы на всех устройствах используйте следующееViewCompat.setNestedScrollingEnabled(childRecyclerView, false);
источник
По какой-то причине @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
щелчки.источник
stopScroll()
это не остановка прокрутки, это просто остановка / остановка прокрутки.isItemSelected
установленным наtrue
. В противном случае вам понадобится пользовательский RecyclerView, чтобы отключить прокрутку навсегда, и я хотел бы избежать этого, поскольку мне потребовалась лишь небольшая дополнительная функциональность, которую предоставляет это решение.Просто добавьте это в свой recycleview в xml
как это
источник
Для остановки прокрутки касанием, но продолжайте прокручивать с помощью команд:
if (appTopBarMessagesRV == null) {appTopBarMessagesRV = findViewById (R.id.mainBarScrollMessagesRV);
источник