В каких случаях ViewHolder и View будут уничтожены а не переиспользованы

«В каких случаях ViewHolder и View будут уничтожены а не переиспользованы» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ViewHolder и View не переиспользуются в следующих случаях:

  1. Изменение типа элемента – если getItemViewType() возвращает разные значения для позиций, RecyclerView создает новые ViewHolder'ы.
override fun getItemViewType(position: Int): Int {
    return if (isHeader(position)) HEADER_TYPE else ITEM_TYPE
}
  1. Нехватка пула RecycledViewPool – когда скролл создает больше ViewHolder'ов, чем вмещает пул.

  2. Изменение данных с notifyDataSetChanged() – RecyclerView не может сопоставить старые и новые позиции, поэтому пересоздает всё.

  3. Явное удаление – при вызове методов типа notifyItemRemoved() с последующим скроллом.

  4. Изменение layoutManager – при смене менеджера (например с Linear на Grid) все View пересоздаются.