Lester
¿Cuáles son las ventajas de este enfoque (el uso de una clase anidada estática en mi clase MyAdapter extiende RecyclerView.Adapter):
static class MyVH extends RecyclerView.ViewHolder {...}
Y este enfoque (usando la clase interna miembro):
class MyVH extends RecyclerView.ViewHolder {...}
¿O no afecta el rendimiento y se podrían usar ambos enfoques?
droides
Es más una pregunta de Java que una pregunta de Android. Se recomienda usar estática para las clases internas para evitar fugas de memoria si sacará sus instancias de la clase. Puedes echar un vistazo a esta impresionante publicación que explica las fugas de memoria en las clases internas.
Básicamente lo que dice nyx:
- Si declara el visualizador como estático, puede reutilizarlo en otros adaptadores. De todos modos, no recomiendo hacerlo, crear una nueva clase separada y usarla desde múltiples lugares, tiene más sentido. Una clase para un propósito.
- En el caso de los titulares de vistas, estas clases solo se usarán dentro del adaptador, sus instancias no deben ir al fragmento o actividad ni a ningún otro lugar solo por definición. Esto significa que tenerlo estático o no estático, en el caso de los titulares de vistas, es lo mismo.
Respondiendo a su pregunta de rendimiento, puede echar un vistazo a esta respuesta. El estático ocupará menos memoria que el otro, pero nuevamente, estamos hablando de recicladores que reciclarán las instancias, por lo que el impacto en la memoria no es un problema.
-
explicación perfecta
– usuario2695433
29 de mayo de 2017 a las 10:02
-
No sé si lee esto después de 2 años, pero tal vez pueda responder esta pregunta: ¿Su respuesta implica que en realidad está bien usar un ViewHolder de clase interna no estática o lo entiendo mal?
– Florián Walther
18 de diciembre de 2017 a las 22:28
-
Sí, en realidad está bien siempre que lo use correctamente, sin sacar la instancia fuera de su padre
– droidpl
19 de diciembre de 2017 a las 17:57
Al usar estático, solo significa que puede reutilizar MyVh
en otros adaptadores. Si sabe con certeza que solo necesitará MyVh
en ese adaptador, debe hacerlo no estático.
Si lo necesitará en otros adaptadores, incluso puede ser mejor crearlo como una clase completamente separada, en lugar de una clase anidada.
¡No debería haber efectos en el rendimiento para estático frente a no estático!
-
explicación simple y efectiva del caso de uso más necesario
– usuario2695433
29 de mayo de 2017 a las 10:03
-
Esta no es la razón principal. El uso de estática elimina las fugas de memoria para las clases internas.
– N Droidev
11 dic 2021 a las 18:40
Prashant Kumar
Si desea utilizar un marcador de vista en muchos lugares, se recomienda crear clases separadas. De lo contrario, si desea usar el marcador de vista solo en un lugar, cree un marcador de vista anidado no estático. Un visor estático no tiene ningún sentido
En la mayoría de los lugares, uso la clase de visor anidado