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.fillViewportentrue - O mantenga
RecyclerViewfuera deScrollView. Yo mi opinión, esta es la mejor opción de lejos. Si la altura deRecyclerViewno 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.