web-dev-qa-db-fra.com

Quelle différence entre le viewholder statique et non statique dans l'adaptateur RecyclerView?

Quels sont les avantages de cette approche (l'utilisation de la classe imbriquée statique dans ma classe MyAdapter étend RecyclerView.Adapter):

static class MyVH extends RecyclerView.ViewHolder {...}

Et cette approche (en utilisant la classe interne des membres):

  class MyVH extends RecyclerView.ViewHolder {...}

Ou cela n'affecte pas les performances et les deux approches pourraient être utilisées?

61
Lester

Il s'agit plus d'une question Java que d'une question Android. Il est recommandé d'utiliser statique pour les classes internes pour éviter les fuites de mémoire si vous supprimez leurs instances de Vous pouvez jeter un oeil à this post génial qui explique les fuites de mémoire sur les classes internes.

Fondamentalement, ce que nyx dit:

  • Si vous déclarez le viewholder comme statique, vous pouvez le réutiliser dans d'autres adaptateurs. Quoi qu'il en soit, je ne recommande pas de le faire, de créer une nouvelle classe séparée et de l'utiliser à partir de plusieurs endroits, cela a plus de sens. Une classe pour un but.
  • Dans le cas des détenteurs de vues, ces classes ne seront utilisées qu'à l'intérieur de l'adaptateur, leurs instances ne doivent pas aller au fragment ou à l'activité ou ailleurs juste par définition. Cela signifie qu'il est identique ou non statique, dans le cas des détenteurs de vues.

En répondant à votre question sur les performances, vous pouvez consulter la réponse this . Le statique prendra moins de mémoire que l'autre, mais encore une fois, nous parlons de recycleurs qui recycleront les instances, donc l'impact de la mémoire n'est pas un problème.

90
droidpl

Si vous souhaitez utiliser une vue à plusieurs endroits, il est recommandé de créer des classes distinctes. Sinon, si vous souhaitez utiliser la vue uniquement à un seul endroit, créez une vue imbriquée non statique. Un viewholder statique n'a aucun sens

Dans la plupart des endroits, j'utilise la classe de visionneuse imbriquée

0
Prashant Kumar