Intereting Posts
Удалить параметры выбора варианта выбора варианта выбора Как определить длинное касание с помощью javascript для Android и iphone? Цвет панели навигации с леденец для Android Android (Java) Простая отправка и получение с помощью сервера – быстрая настройка Где находятся иконки Android в SDK? Android. Избегайте действий, которые нужно уничтожить, просто останавливая или приостанавливая его при нажатии кнопки «Назад». Графика на Android: путь с плавными кривыми? Организация каталогов макета Android Изменение цвета / стиля панели инструментов на клике SearchView Android AndEngine: правильная обработка обнаружения коллизий Приемник широковещательной передачи Android не работает Потяните, чтобы обновить Android и Phonegap Гарантируется ли экземпляр класса Application до того, как вызывается определенный загрузочный приемник Android API для обнаружения новых носителей со встроенной камеры и микрофона Андроид, как сохранить растровый – багги код

Отключить прокрутку в дочерней программе Recyclerview android

У меня есть макет состоит из Parent RecyclerView с дополнительным Recyclerview в нем

Я знаю, что нехорошо помещать список внутри другого списка, но я должен так, чтобы я мог использовать функции вспомогательного списка, такие как прокрутка и перетаскивание

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

Solutions Collecting From Web of "Отключить прокрутку в дочерней программе Recyclerview android"

Наконец я нашел решение.

Создание пользовательского LinearLayoutManager

public class CustomLinearLayoutManager extends LinearLayoutManager { public CustomLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } // it will always pass false to RecyclerView when calling "canScrollVertically()" method. @Override public boolean canScrollVertically() { return false; } } 

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

 CustomLinearLayoutManager customLayoutManager = new CustomLinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false); 

Наконец, установите пользовательский макет в качестве менеджера макетов просмотра ресайклеров

 recyclerView.setLayoutManager(customLayoutManager); 

Хотя, возможно, не очень хорошая практика иметь встроенные просмотры recycler, иногда вы не можете избежать этого. Что-то вроде этого может работать:

 public class NoScrollRecycler extends RecyclerView { public NoScrollRecycler(Context context){ super(context); } public NoScrollRecycler(Context context, AttributeSet attrs){ super(context, attrs); } public NoScrollRecycler(Context context, AttributeSet attrs, int style){ super(context, attrs, style); } @Override public boolean dispatchTouchEvent(MotionEvent ev){ //Ignore scroll events. if(ev.getAction() == MotionEvent.ACTION_MOVE) return true; //Dispatch event for non-scroll actions, namely clicks! return super.dispatchTouchEvent(ev); } } 

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

Кроме того, чтобы использовать это в XML (если вы не знаете), выполните следующие действия:

 <com.yourpackage.location.NoScrollRecycler ... ... > ... ... </com.yourpackage.location.NoScrollRecycler> 

На вашем ActivityName.java внутри метода onCreate () напишите:

 RecyclerView v = (RecyclerView) findViewById(R.id.your_recycler_view_id); v.setNestedScrollingEnabled(false); 

Каким-либо образом, если вы используете схему координатора, в случае, если вы хотите упростить ситуацию, и вы хотите отключить вложенную прокрутку.

  <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/activitiesListRV" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.widget.NestedScrollView> 

И снова вы применяете тот же принцип: на вашем ActivityName.java внутри метода onCreate () напишите:

 RecyclerView v = (RecyclerView) findViewById(R.id.your_recycler_view_id); v.setNestedScrollingEnabled(false); 

Итак, в основном в XML, вы должны указать приложение: layout_behavior

 app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

android:nestedScrollingEnabled="false" в дочернем RecyclerView

Можете добавить

 android:nestedScrollingEnabled="false" 

К вашему RecyclerView в XML или

 childRecyclerView.setNestedScrollingEnabled(false); 

К вашему RecyclerView в Java.

РЕДАКТИРОВАТЬ:-

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

 ViewCompat.setNestedScrollingEnabled(childRecyclerView, false); 

Вы можете использовать setNestedScrollingEnabled (false); На просмотре вспомогательного ресайклера, который останавливает прокрутку в режиме просмотра вспомогательного ресайклера. В моем случае код был

mInnerRecyclerView.setNestedScrollingEnabled (ложь); Где mInnerRecyclerView является внутренним recyclerview

Я пробовал много предлагаемых решений и не мог найти тот, который работал в моем случае. У меня есть более 1 RecyclerView внутри ScrollView с помощью GridLayoutManager. В результате вышеизложенного было показано, что ScrollView останавливается для прокрутки всякий раз, когда я поднимаю палец (он не скользил по верхней или нижней части представления, когда мой палец был поднят над RecyclerView)

Просматривая источник RecyclerView, внутри onTouchEvent есть вызов менеджера макета:

 final boolean canScrollHorizontally = mLayout.canScrollHorizontally(); final boolean canScrollVertically = mLayout.canScrollVertically(); 

Если вы переопределите их в пользовательском менеджере макетов, верните false, и он прекратит прокрутку. Он также устраняет проблему, когда ScrollView перестанет прокручиваться.

Если вы не хотите делать настраиваемое представление, другим вариантом является создание макета такого же размера перед RecyclerView и сделать его доступным для кликов.

EDIT: Но, к сожалению, он также блокирует события для элемента списка.