J'ai du mal à comprendre la terminologie utilisée par la documentation officielle. Plus précisément, il existe les méthodes onViewRecycled
, onDetachedFromRecyclerView
et onViewDetachedFromWindow
. Quelle est la différence entre ces trois?
Il y a une différence significative, même dans leur signature:
onDetachedFromRecyclerView(RecyclerView recyclerView)
- Appelé par RecyclerView lorsqu'il cesse d'observer cet adaptateur.
Ce que vous n'avez peut-être pas remarqué, il existe une méthode de correspondance toujours appelée avant celle-ci:
onAttachedToRecyclerView(RecyclerView recyclerView)
- Appelé par RecyclerView lorsqu'il commence à observer cet adaptateur.
Lorsque vous appelez recyclerView.setAdapter(adapter)
, adapter
reçoit un appel à onAttachedToRecyclerView(recyclerView)
. Ensuite, l'appel suivant à recyclerView.setAdapter()
déclenchera adapter
s onDetachedFromRecyclerView(recyclerView)
.
Vous n'avez généralement pas besoin de remplacer cette méthode, sauf dans certaines circonstances spéciales (comme le comptage des recyclerView
s, etc.) observés.
onViewRecycled(VH holder)
est beaucoup plus simple, il est appelé avant d'envoyer viewHolder
à recycleViewPool
.
Vous pouvez le considérer comme une méthode de "nettoyage" de onBindViewHolder(VH holder, int position)
.
onViewDetachedFromWindow(VH holder)
suit toujours une onViewAttachedToWindow(VH holder)
correspondante. Il est appelé au moment exact où le viewholder devient visible ou invisible (attacher/détacher des appels).
Si un viewHolder
a été détaché mais pas encore recyclé, il est possible qu'il puisse recevoir de nouveau l'appel de onViewAttachedToWindow(ViewHolder)
sans avoir à relier les données avec onBindViewHolder
.