2016-09-27 3 views
0

Dans RecyclerView, la méthode onCreateViewHolder créera de nouveaux affichages si nécessaire. Je sais qu'il sera appelé autant de fois qu'il y a d'éléments dans votre liste qui peuvent tenir sur l'écran. Mais, pour une raison étrange, lorsque je défile sur RecyclableList, `onCreateViewHolder est invoqué quelques fois de plus. Pourquoi crée-t-il un nouveau viewHolder? Dans quels cas viewHolder sera-t-il créé? Je pensais que cela ne doit être invoqué qu'une seule fois.RecyclerView - onCreateViewHolders est invoqué plusieurs fois lorsqu'il est dégradé

logcat:

09-27 16:39:20.805 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.814 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.817 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.818 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.822 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.825 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.826 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 

ces invoquées lorsque j'obtient défiler vers le bas:

09-27 16:39:20.827 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.828 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 
09-27 16:39:20.830 8603-8603/teamtreehouse.com.myapplication D/testHourViewHolder: I AM INVOKED 

Répondre

1

Le point d'un RecyclerView est qu'il n'a pas besoin de tenir votre liste complète des objets mémoire en tout temps; Cela signifie qu'il ne crée pas de ViewHolders pour vos éléments de liste tant qu'ils ne sont pas (presque) en vue de l'écran. Ainsi, lorsque vous lancez votre activité pour la première fois, elle crée tous les ViewHolders dans la vue (avec un léger seuil pour éviter le bégaiement) et rien d'autre, puis, lorsque vous faites défiler, commence à générer les vues ci-dessous.