studio recyclerview example ejemplo android viewpagerindicator android-recyclerview

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 en true
  • O mantenga RecyclerView fuera de ScrollView . Yo mi opinión, esta es la mejor opción de lejos. Si la altura de RecyclerView no está limitada, que es el caso cuando se coloca en ScrollView , 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 de RecyclerView .

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.