Recyclerview onBindViewHolder llamó para todos los elementos cuando dentro LinearLayout con pesos

Recientemente he actualizado desde la biblioteca de soporte recyclerview-v7: 23.1.1 a recyclerview-v7: 25.1.0.

Mi diseño contiene 2 recylerviews splitted 50% en la pantalla. El código xml es el siguiente:

<LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView1" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:scrollbars="none"/> <android.support.v4.widget.Space android:layout_width="@dimen/two_dp" android:layout_height="match_parent" android:background="@color/dark_gray"/> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerView2" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:scrollbars="none"/> </LinearLayout> 

Ahora onBindViewHolder se llama para todos los elementos de lista en lugar de sólo los elementos visibles. Esto comenzó a suceder después de la actualización a la biblioteca de soporte 25.1.0.

Está funcionando bien si los pesos se quitan, pero tener 2 recylcerviews lado a lado se requiere.

¿Cómo le digo a recyclerview que recicle las vistas en lugar de cargarlas todas?

ACTUALIZACIÓN: Funciona bien en Marshmallow y dispositivos anteriores. La edición está presente en Lollipop o abajo. Puede encontrar un proyecto de demostración aquí: https://bitbucket.org/aniketit/recyclerviewtest

Tuve el mismo problema. RecyclerView estaba reciclando bien en Marshmallow pero no antes.

Mi error fue poner mi RecyclerView en un ScrollView. Debería comprobar si tiene una vista de desplazamiento, en caso afirmativo, eliminarla y su problema se resolverá para los dispositivos de pre-malvavisco.

Me encontré con el mismo problema que persistió después de eliminar elementos ponderados y 0dp. En mi caso, el problema era bastante trivial – yo había puesto inadvertidamente mi RecyclerView dentro de un NestedScrollView con fillViewPort = true. Esto hace que el adaptador construya todos los elementos para la vista y notará un retraso significativo en la capacidad de respuesta.

Resulta que el problema se producirá si sólo tiene el RecyclerView en un ScrollView antiguo llano también.

Con librerías> 23.1.1 puede eliminar

Android: layout_width = "0dp"

Quitarlo y todo funciona perfectamente.

  • Implementación del menú de acción flotante mediante el botón de acción Float de Android Design Support library
  • La suspensión de soporte de Android v23.1.0 se desplaza
  • ¿Cómo gradle maneja multi módulos con diferentes versiones de la biblioteca de soporte v4?
  • Después de configurar android-support-v7-appcompat R.java falta
  • Android: no puede encontrar TextView dentro de SearchWidget cuando usa la biblioteca de soporte técnico de Android
  • fitsSystemWindows en el dispositivo API16 no funciona
  • No se puede resolver el símbolo 'AppCompatActivity'
  • Java.util.zip.ZipException: entrada duplicada: android / support / v7 / graphics / drawable / DrawableUtils.class
  • Recurso no encontrado: Theme.Leanback
  • Impedir que RecyclerView se desplace en AppBarLayout antes de que AppBarLayout se colapse.
  • NavigationView y ActionBarDrawerToggle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.