Есть существенная разница даже в их подписи:
onDetachedFromRecyclerView(RecyclerView recyclerView)
- Вызывается RecyclerView, когда он прекращает наблюдать за этим адаптером.
Что вы могли не заметить, перед этим всегда вызывается соответствующий метод:
onAttachedToRecyclerView(RecyclerView recyclerView)
- Вызывается RecyclerView, когда он начинает наблюдать за этим адаптером.
Когда вы звоните recyclerView.setAdapter(adapter)
, adapter
получает вызов на onAttachedToRecyclerView(recyclerView)
. Затем следующий вызов recyclerView.setAdapter()
вызовет adapter
s onDetachedFromRecyclerView(recyclerView)
.
Обычно вам не нужно переопределять этот метод, за исключением некоторых особых обстоятельств (например, ведение учета наблюдаемых recyclerView
с и т. Д.).
onViewRecycled(VH holder)
намного проще, он вызывается перед отправкой viewHolder
на recycleViewPool
.
Вы можете думать об этом как о методе "очистки" onBindViewHolder(VH holder, int position)
.
onViewDetachedFromWindow(VH holder)
всегда следует за совпадением onViewAttachedToWindow(VH holder)
. Он вызывается в точный момент, когда видоискатель становится видимым или невидимым (вызовы присоединения / отключения)
Если viewHolder
был отсоединен, но еще не переработан, вполне возможно, что он может принять вызов onViewAttachedToWindow(ViewHolder)
снова без необходимости перепривязывать данные с помощью onBindViewHolder
.