web-dev-qa-db-fra.com

La différence entre, onViewRecycled, onDetachedFromRecyclerView et onViewDetachedFromWindow dans Android

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?

9
pricks

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 adapters 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 recyclerViews, 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.

21
Pawel