ejemplo - recyclerview android example
android: RecyclerView dentro de ScrollView (4)
Tengo un RecyclerView
envuelto en LinearLayout
y funciona perfectamente como se esperaba. Puedo ver todos los datos en el RecyclerView
como poblados. Hasta aquí todo bien.
Cuando LinearLayout
el LinearLayout
en un ScrollView
, el RecyclerView
queda en blanco. No veo nada dentro de RecyclerView
. ¿Por qué? Cómo hacer que esto funcione
La página es una de las pestañas en un ViewPagerIndicator
, por lo que todo en esa pestaña debe estar en un ScrollView
.
Gracias por toda la ayuda.
Establezca esta propiedad para ScrollView,
android:fillViewport="true"
ScrollView se extenderá para llenar los contenidos
Después de verificar la implementación, la razón parece ser la siguiente. Si RecyclerView
se pone en un ScrollView
, durante el paso de medida su altura no se especifica (porque ScrollView
permite cualquier altura) y, como resultado, obtiene igual a la altura mínima (según la implementación) que aparentemente es cero.
Tienes un par de opciones para arreglar esto:
- Establecer una cierta altura para
RecyclerView
- Establezca
ScrollView.fillViewport
entrue
- O mantenga
RecyclerView
fuera deScrollView
. Yo mi opinión, esta es la mejor opción de lejos. Si la altura deRecyclerView
no está limitada, que es el caso cuando se coloca enScrollView
, entonces todas las vistas del Adaptador tienen suficiente espacio verticalmente y se crean todas a la vez. Ya no se ve reciclaje, lo que rompe el propósito deRecyclerView
.
espero que esto ayude
Agregue esta línea a su recyclerView xml:
android:nestedScrollingEnabled="false"
pruébalo, recyclerview se desplazará suavemente con la altura flexible dentro de scrollview.
Nada me ayudó excepto esto:
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
Tengo esta respuesta allí . Gracias Piyush Gupta por eso.