Algoritmo de reutilización de RecyclerView

Tengo un Adapter con varios tipos de vista. He notado que onCreateViewHolder() se llama con bastante frecuencia aunque onCreateViewHolder() , onBindViewHolder() y getItemViewType() se implementan correctamente.

Por ejemplo, mi RecyclerView debe mostrar una lista simple de diferentes elementos como este y permite asumir que todos los elementos tienen la misma altura de vista y que 6 elementos llenar toda la pantalla (coincide con la altura de RecyclerView):

 > ViewType0 > ViewType0 > ViewType0 > ViewType0 > ViewType0 > ViewType1 > ViewType2 > ViewType2 > ViewType2 > ViewType2 > ViewType1 > ViewType1 > ViewType1 > ViewType0 > ViewType0 > ViewType0 

Al desplazarse y llegar al final de la lista, parece que para los dos últimos elementos ( ViewType0 ) RecyclerView llama onCreateViewHolder() pero desde mi punto de vista el reciclerview debe reciclar (reutilizar) el ya existente (hay 5 en la parte superior de La lista que no son visibile) en lugar de recrear dos nuevos para los dos últimos elementos.

¿Es normal ese comportamiento? ¿Son los ajustes que puedo aplicar para evitar la recreación del nuevo ViewHolder porque debería haber definitivamente ViewHolders reutilizables (desde la parte superior de la lista)?

Es completamente normal. Voy a explicar brevemente cómo funciona.

Tan pronto como cualquier vista se desplaza fuera de la ventana, RecyclerView tiene dos opciones: reciclar o reutilizar esa vista. Determina qué opción elegir, simplemente compara el tipo de vista del elemento siguiente que aparece junto con la vista desplegada; Si son iguales, simplemente reutilice la vista, y viceversa.

En su caso, esas 5 vistas ViewType0 son sin duda reciclado mucho tiempo antes de que las dos últimas vistas ViewType0 están configuradas para aparecer, por lo que la única manera para que muestre la vista es para volver a crearla.

  • Android RecyclerView con LinearLayout
  • RecyclerView ItemTouchHelper Action_Drag_Ended?
  • ¿Cómo pasar datos a fragmentos cuando haga clic en cardview en onBindViewHolder?
  • Cómo reutilizar objetos RecyclerView, adaptadores y soportes de visualización
  • Android RecyclerView Desplazamiento no funciona después de la edición de diseño
  • Espresso, el desplazamiento no funciona cuando NestedScrollView o RecyclerView está en CoordinatorLayout
  • NullPointerException en la animación de dissapearence de RecyclerView desde soporte v.23.2.0
  • Ocultar barra de desplazamiento de RecyclerView
  • Reciclado horizontal con bordes de decoloración
  • RecyclerView para la aplicación de chat
  • Aumenta la escala del elemento en RecyclerView para superponer 2 elementos adyacentes.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.