¿Cómo usar RecyclerView
dentro NestedScrollView
?
RecyclerView
el contenido no es visible después de configurar el adaptador.
ACTUALIZACIÓN del código de diseño actualizado.
<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>
android
android-recyclerview
Mecida
fuente
fuente
Respuestas:
Reemplace su recyclerView con,
aquí,
gestionará el resto de las cosas.
Una cosa más, no es necesario poner su reciclador Ver dentro de NestedScrollView
fuente
NestedScrollView
sino solo conapp:layout_behavior="@string/appbar_scrolling_view_behavior"
. Esta es la clave!CoordinatorLayout
,AppBarLayout
y la configuración adecuadalayout_scrollFlags
en la (s) vista (s) secundaria (s) que deben desplazarse conRecyclerView
. No estoy seguro de por qué esto se omitió de la respuesta. De lo contrario, esta es una solución agradable y simple.ACTUALIZACIÓN 1
Desde Android Support Library 23.2.0 se agregaron métodos
setAutoMeasureEnabled(true)
para LayoutManagers. Hace que RecyclerView ajuste su contenido y funciona de maravilla.http://android-developers.blogspot.ru/2016/02/android-support-library-232.html
Así que solo agrega algo como esto:
ACTUALIZACIÓN 2
Dado que 27.1.0
setAutoMeasureEnabled
está en desuso, debe proporcionar una implementación personalizada de LayoutManager con un método anuladoisAutoMeasureEnabled()
Pero después de muchos casos de uso de RecyclerView, recomiendo no usarlo en modo envolvente , porque esto no es para lo que está destinado. Intente refactorizar todo su diseño usando RecyclerView normal con varios tipos de elementos. O utilice el enfoque con LinearLayout que describí a continuación como último recurso
Respuesta anterior (no recomendada)
Puedes usar
RecyclerView
dentroNestedScrollView
. En primer lugar, debe implementar su propia costumbreLinearLayoutManager
, haceRecyclerView
que su contenido se ajuste. Por ejemplo:Después de eso, use esto
LayoutManager
para suRecyclerView
Pero también debe llamar a esos dos métodos:
Aquí
setNestedScrollingEnabled(false)
deshabilita el desplazamiento paraRecyclerView
, por lo que no intercepta el evento de desplazamientoNestedScrollView
. YsetHasFixedSize(false)
determine que los cambios en el contenido del adaptador pueden cambiar el tamaño delRecyclerView
Nota importante: esta solución es un poco defectuosa en algunos casos y tiene problemas con el rendimiento, por lo que si tiene muchos elementos en su
RecyclerView
recomendaría utilizar unaLinearLayout
implementación personalizada de la vista de lista, cree un adaptador análogo y hágalo comportarse comoListView
oRecyclerView
fuente
RecyclerView
.1) Debe usar la biblioteca de soporte 23.2.0 (o) anterior
2) y la
RecyclerView
altura seráwrap_content
.3)
recyclerView.setNestedScrollingEnabled(false)
Pero al hacer esto, el patrón de reciclador no funciona . (es decir, todas las vistas se cargarán a la vez porque
wrap_content
necesita la altura completaRecyclerView
para que dibuje todas lasViews at once. No view will be recycled). Try not to use this pattern unless it is really required. Try to use
vistas secundarias Tipoand add all other views that need to scroll to
RecyclerViewrather than using
RecyclerViewin
Scrollview ". El impacto en el rendimiento será muy alto.Para hacerlo simple "simplemente actúa como
LinearLayout
con todas las vistas secundarias"fuente
recyclerView.setNestedScrollingEnabled(false)
me ayudó a tener un desplazamiento suave.Puedes usar
android:fillViewport="true"
para hacerNestedScrollView
medir elRecyclerView
. ElRecyclerView
llenará la altura restante. así que si quieres desplazarteNestScrollView
, puedes configurar elRecyclerView
'sminHeight
.fuente
Simplemente agregar
recyclerView.setNestedScrollingEnabled(false);
antes desetAdapter
sí mismo funcionó para mí. No agregué ningúnapp:layout_behavior="@string/appbar_scrolling_view_behavior"
lugar y no configuré ningún administrador de diseño personalizadofuente
Esto es lo que funciona para mi
fuente
Hay un código simple y de prueba que puede verificar
fuente
Porque
androidx
se llamaandroidx.core.widget.NestedScrollView
, y también se desplaza por igual mantequilla con propiedadesisScrollContainer
ymeasureAllChildren
habilitado:fuente
Intente utilizar esta biblioteca: https://github.com/serso/android-linear-layout-manager .
LayoutManager de la biblioteca hace que RecyclerView envuelva su contenido. En este caso, RecyclerView será "tan grande como las vistas internas", por lo que no tendrá barras de desplazamiento y el usuario utilizará las capacidades de desplazamiento de NestedScrollView. Por lo tanto, no será ambiguo como "desplazable dentro de desplazable".
fuente
Aquí está el código que estoy usando para evitar problemas de desplazamiento:
fuente
Solía RecyclerView dentro de un NestedScrollView y funcionó para mí. El único problema que tuve que tener en cuenta fue que un NestedScrollView solo toma una vista secundaria. Entonces, en mi caso, utilicé el grupo de vista LienearLayout que albergaba mi RecyclerView más una cantidad de otras vistas que necesitaba.
Experimento un problema al colocar mi RecyclerView dentro de NestedScrollView. Me di cuenta de que desplazar el contenido de mi RecyclerView se aflojó.
Más tarde me di cuenta de que mi RecyclerView estaba recibiendo el evento de desplazamiento y, por lo tanto, estaba en conflicto con el comportamiento de desplazamiento de NestedScrollView.
Entonces, para resolver ese problema, tuve que deshabilitar la funcionalidad de desplazamiento de mi RecyclerView con este método
movieListNewRecyclerView.setNestedScrollingEnabled(false);
Puedes ver mi Instagram para ver un video corto de lo que realmente hice. Este es mi identificador de instagram ofelix03
Haga clic en esta imagen para ver lo que hice.
fuente
Tengo Viewpager y RecyclerView dentro de NestedScrollView. Después de agregar las siguientes líneas
Resolví el problema de desplazamiento lento y retraso de desplazamiento.
fuente
recyclerView.setHasFixedSize(true);
?No puede usar una vista de reciclador dentro de una vista de desplazamiento anidada. No está destinado a contener más vistas desplazables, pero es porque es un elemento secundario de un diseño de desplazamiento en sí mismo que necesita la vista de desplazamiento anidada. Tuve el mismo problema, pero al final moví mi vista de texto para que fuera una vista de encabezado dentro de la vista de reciclaje, hice que la vista de reciclaje fuera un elemento directo del diseño del coordinador y eliminé la vista de desplazamiento anidada. Entonces todos mis problemas se fueron.
fuente
RecyclerView
implementosNestedScrollingChild
,RecyclerView
debe poder desplazarse a través deNestedScrollView
.Si está utilizando
RecyclerView-23.2.1
o más tarde. La siguiente solución funcionará bien:En su diseño, agregue RecyclerView así:
Y en tu archivo java:
aquí
layoutManager.setAutoMeasureEnabled(true);
hará el truco.Consulte este problema y este blog de desarrolladores para obtener más información.
fuente
Una solución para mantener la función de reciclaje de la vista de reciclaje y evitar que la vista de reciclaje cargue todos sus datos es establecer una altura fija en la vista de reciclaje. Al hacer esto, la vista del reciclador se limita solo a cargar tanto como su altura pueda mostrar al usuario, reciclando así su elemento si alguna vez se desplaza hacia abajo / arriba.
fuente
Hay muchas buenas respuestas. La clave es que se debe ajustar
nestedScrollingEnabled
afalse
. Como se mencionó anteriormente, puede hacerlo en código java:Pero también tiene la oportunidad de establecer la misma propiedad en el código xml (
android:nestedScrollingEnabled="false"
):fuente
Si está utilizando RecyclerView ScrollListener dentro de NestedScrollView , addOnScrollListener oyente no funciona correctamente si se utilizan ambos.
Usa este código.
este código funciona bien RecyclerView ScrollListener dentro de NestedScrollView .
Gracias
fuente
Tuve que implementar CoordinatorLayout con el desplazamiento de la barra de herramientas y me llevó todo el día jugar con esto. Lo tengo funcionando eliminando NestedScrollView en absoluto. Así que solo estoy usando RelativeLayout en la raíz.
fuente
no use recyclerView dentro de NestedScrollView. ¡Puede causar problemas en cascada! Sugiero usar ItemViewTypes en RecyclerView para manejar múltiples tipos de vistas. simplemente agregue un RecyclerView con match_parent ancho y alto. luego, en su recyclerViewAdapter, anule getItemViewType y use la posición para manejar qué diseño se inflará. después de eso, puede manejar su soporte de vista utilizando el método onBindViewHolder.
fuente
fuente
He usado esta increíble extensión (escrita en kotlin pero también se puede usar en Java)
https://github.com/Widgetlabs/expedition-nestedscrollview
Básicamente obtienes el
NestedRecyclerView
interior de cualquier paquete, digamos utilidades en tu proyecto, luego simplemente crea tu vista de reciclador comoMira este impresionante artículo de Marc Knaup
https://medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a
fuente
Beneficios:
Reparar :
fuente
Para mi caso, el hijo de NestedScrollview es ConstraintLayout. No funciona como se esperaba, lo reemplacé por LinearLayout. Quizás ayude a alguien.
fuente
RecyclerView con NestedScrollView
fuente