Как использовать RecyclerView
внутри NestedScrollView
?
RecyclerView
содержимое не видно после настройки адаптера.
ОБНОВЛЕНИЕ Код макета обновлен.
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/keyline_1">
</RelativeLayout>
<View
android:id="@+id/separator"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#e5e5e5" />
<android.support.v7.widget.RecyclerView
android:id="@+id/conversation"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
Ответы:
Замените свой recyclerView на,
Вот,
будет управлять остальными вещами.
Еще одна вещь, нет необходимости помещать свой RecyclerView внутри NestedScrollView
источник
NestedScrollView
но только сapp:layout_behavior="@string/appbar_scrolling_view_behavior"
. Это ключ!CoordinatorLayout
,AppBarLayout
и установив соответствующийlayout_scrollFlags
по мнению ребенка (ы) , которые должны быть прокручиваются сRecyclerView
. Не уверен, почему это было опущено в ответе. В противном случае это хорошее и простое решение.ОБНОВЛЕНИЕ 1
Начиная с библиотеки поддержки Android 23.2.0 был добавлен метод
setAutoMeasureEnabled(true)
для LayoutManager. Это делает RecyclerView, чтобы обернуть его содержимое и работает как шарм.http://android-developers.blogspot.ru/2016/02/android-support-library-232.html
Так что просто добавьте что-то вроде этого:
ОБНОВЛЕНИЕ 2
С 27.1.0
setAutoMeasureEnabled
устарела, вы должны предоставить пользовательскую реализацию LayoutManager с переопределенным методомisAutoMeasureEnabled()
Но после многих случаев использования RecyclerView я настоятельно рекомендую не использовать его в режиме обтекания , потому что это не то, для чего он предназначен. Попробуйте провести рефакторинг всего макета, используя обычный RecyclerView с несколькими типами элементов. Или используйте подход с LinearLayout, который я описал ниже как последнее средство
Старый ответ (не рекомендуется)
Вы можете использовать
RecyclerView
внутриNestedScrollView
. Прежде всего, вы должны реализовать свой собственный обычайLinearLayoutManager
, он заставляет васRecyclerView
обернуть его содержимое. Например:После этого используйте это
LayoutManager
для вашегоRecyclerView
Но вы также должны вызвать эти два метода:
Здесь
setNestedScrollingEnabled(false)
отключите прокрутку дляRecyclerView
, чтобы он не перехватывал событие прокрутки отNestedScrollView
. ИsetHasFixedSize(false)
определите, что изменения в содержимом адаптера могут изменить размерRecyclerView
Важное примечание: в некоторых случаях это решение немного глючит и имеет проблемы с производительностью, поэтому, если у вас много элементов,
RecyclerView
я бы порекомендовал использовать настраиваемуюLinearLayout
реализацию представления списка, создать для него аналог Adapter и сделать его вести себя какListView
илиRecyclerView
источник
RecyclerView
.1) Вы должны использовать библиотеку поддержки 23.2.0 (или) выше
2) и
RecyclerView
высота будетwrap_content
.3)
recyclerView.setNestedScrollingEnabled(false)
Но, делая это, шаблон переработчика не работает . (т.е. все представления будут загружены одновременно, потому что
wrap_content
требуется высота завершения,RecyclerView
поэтому он будет рисовать все дочерниеViews at once. No view will be recycled). Try not to use this pattern unless it is really required. Try to use
viewTypeand add all other views that need to scroll to
RecyclerViewrather than using
RecyclerViewin
Scrollview`. Влияние на производительность будет очень высоким.Чтобы сделать это простым "это просто действует как
LinearLayout
со всеми дочерними представлениями"источник
recyclerView.setNestedScrollingEnabled(false)
помогла мне иметь плавную прокрутку.Вы можете использовать,
android:fillViewport="true"
чтобыNestedScrollView
измеритьRecyclerView
.RecyclerView
Заполнит оставшуюся высоту. так что если вы хотите , чтобы прокручиватьNestScrollView
, вы можете установитьRecyclerView
«SminHeight
.источник
У меня просто добавление
recyclerView.setNestedScrollingEnabled(false);
доsetAdapter
себя работало. Я нигде не добавилapp:layout_behavior="@string/appbar_scrolling_view_behavior"
и не установил никакого собственного менеджера компоновкиисточник
Это то, что работает для меня
источник
Существует простой и тестовый код, который вы можете проверить
источник
Потому что
androidx
он называетсяandroidx.core.widget.NestedScrollView
- и он также прокручивает похожее масло со свойствамиisScrollContainer
иmeasureAllChildren
включает:источник
Попробуйте использовать эту библиотеку - https://github.com/serso/android-linear-layout-manager .
LayoutManager из библиотеки заставляет RecyclerView обернуть его содержимое. В этом случае RecyclerView будет «таким же большим, как внутренние представления», поэтому у него не будет полос прокрутки, и пользователь будет использовать возможности прокрутки NestedScrollView. Следовательно, он не будет неоднозначным, как «прокручиваемый внутри прокручиваемый».
источник
Вот код, который я использую, чтобы избежать проблем с прокруткой:
источник
Я использовал RecyclerView внутри NestedScrollView и он работал для меня. Единственное, о чем я должен был помнить, это то, что NestedScrollView принимает только одно дочернее представление. Так что в моем случае я использовал видовую группу LienearLayout, в которой был мой RecyclerView, а также ряд других нужных мне видов.
Я испытываю одну проблему, помещающую мой RecyclerView в NestedScrollView. Я понял, что прокрутка содержимого моего RecyclerView замедлилась.
Позже я понял, что мой RecyclerView получает событие прокрутки и, следовательно, конфликтует с режимом прокрутки NestedScrollView.
Таким образом, чтобы решить эту проблему, я должен был отключить функцию прокрутки моего RecyclerView с помощью этого метода
movieListNewRecyclerView.setNestedScrollingEnabled(false);
Вы можете проверить мой Instagram для короткого видео о том, что я на самом деле сделал. Это моя ручка instagram ofelix03
Нажмите на это изображение, чтобы увидеть, что я сделал
источник
У меня есть Viewpager и RecyclerView внутри NestedScrollView. После добавления ниже строк
Я решил проблему медленной прокрутки и задержки прокрутки.
источник
recyclerView.setHasFixedSize(true);
?Вы не можете использовать представление рециркулятора во вложенном представлении прокрутки. Он не предназначен для того, чтобы содержать дополнительные прокручиваемые представления, но потому, что он является дочерним по отношению к самому макету с прокруткой, вам нужен вложенный прокручиваемый вид. У меня возникла та же проблема, но в итоге я переместил свое текстовое представление в представление заголовка в представлении реселлера, сделало его рекурсором прямым потомком макета координатора и удалило вложенное представление прокрутки. Тогда все мои проблемы исчезли.
источник
RecyclerView
инструментыNestedScrollingChild
,RecyclerView
должны быть в состоянии прокручиваться с помощьюNestedScrollView
.Если вы используете
RecyclerView-23.2.1
или позже. Следующее решение будет работать нормально:В свой макет добавить RecyclerView, как это:
И в вашем файле Java:
Вот
layoutManager.setAutoMeasureEnabled(true);
сделаем свое дело.Проверьте эту проблему и этот блог разработчика для получения дополнительной информации.
источник
Одним из решений, позволяющих сохранить функцию рециркуляции в обзоре утилизатора и избежать его повторной загрузки для загрузки всех ваших данных, является установка фиксированной высоты в самом обзоре утилизатора. Делая это, просмотр переработчика ограничивается только загрузкой настолько, насколько его высота может показать пользователю, таким образом, перерабатывая его элемент, если вы когда-нибудь прокрутите его вниз / вверх.
источник
Есть много хороших ответов. Ключ в том, что вы должны установить
nestedScrollingEnabled
наfalse
. Как уже упоминалось выше, вы можете сделать это в коде Java:Но также у вас есть возможность установить то же свойство в xml code (
android:nestedScrollingEnabled="false"
):источник
Если вы используете RecyclerView ScrollListener внутри NestedScrollView , addOnScrollListener слушатель не работает должным образом, если вы используете оба.
Используйте этот код.
этот код работает нормально RecyclerView ScrollListener внутри NestedScrollView .
Спасибо
источник
Мне пришлось реализовать CoordinatorLayout с прокруткой на панели инструментов, и мне просто пришлось целый день возиться с этим. У меня это работает, удалив NestedScrollView на всех. Так что я просто использую RelativeLayout в корне.
источник
не используйте recyclerView внутри NestedScrollView. это может вызвать каскадные проблемы! Я предлагаю использовать ItemViewTypes в RecyclerView для обработки нескольких видов представлений. просто добавьте RecyclerView с шириной и высотой match_parent. затем в вашем recyclerViewAdapter переопределите getItemViewType и используйте позицию для обработки того, какой макет нужно надуть. после этого вы можете обрабатывать свой видовой держатель с помощью метода onBindViewHolder.
источник
источник
Я использовал это удивительное расширение (написано на kotlin, но может также использоваться на Java)
https://github.com/Widgetlabs/expedition-nestedscrollview
По сути, вы получаете
NestedRecyclerView
внутри любой пакет, скажем, утилиты в вашем проекте, а затем просто создаете свой переработчик, какПроверьте эту удивительную статью от Marc Knaup
https://medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a
источник
Benfits:
Исправить:
источник
Для моего случая дочерним элементом NestedScrollview является ConstraintLayout. Это не работает, как ожидалось, я заменил его на LinearLayout. Может быть, это кому-то помогает.
источник
RecyclerView с NestedScrollView
источник