¿Por qué en el patrón ViewHolder la clase ViewHolder debe ser estática?

Sólo estoy tratando de tener una mejor comprensión del siguiente patrón que uso regularmente para optimizar ListView

Mis lecturas sólo me señalaron el hecho de que una clase interna estática se trata como clase de nivel superior. ¿Cuál es el beneficio de tal cosa en comparación con una clase de miembro (no estática)?

 @Override public View getView(int position, View convertView, ViewGroup parent) { Comment comment = getItem(position); ViewHolder holder; if (convertView == null){ holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.mylayout, null); holder.nickname = (TextView) ((ViewGroup) convertView).findViewById(R.id.nickname); convertView.setTag(holder); }else{ holder = (ViewHolder) convertView.getTag(); } holder.nickname.setText(comment.getMember_nickname()); CharSequence return convertView; } public static class ViewHolder{ TextView nickname; } 

Una ventaja de usar la clase interna estática, es que la clase interna se puede acceder desde métodos estáticos, sin tener una instancia de la clase externa.

Si la clase interna no estática:

 class MyOuter { private int x = 7; public void makeInner() { MyInner in = new MyInner(); in.seeOuter(); } class MyInner { public void seeOuter() { System.out.println("Outer x is " + x); } } } public static void main(String[] args) { MyOuter mo = new MyOuter(); MyOuter.MyInner inner = mo.new MyInner(); inner.seeOuter(); } 

Si la clase interna es estática:

 class BigOuter { static class Nest {void go() { System.out.println("hi"); } } } class Broom { static class B2 {void goB2() { System.out.println("hi 2"); } } public static void main(String[] args) { BigOuter.Nest n = new BigOuter.Nest(); n.go(); B2 b2 = new B2(); b2.goB2(); } } 

Mi opinión es que es mejor tener la clase ViewHolder estática ya que no va a perder el adaptador.

Si el adaptador retiene algunas colecciones pesadas o incluso vistas (depende de cada caso en particular), sería genial mantener el control de qué objetos conservan el adaptador.

Tener una gran cantidad de instancias de objetos de una clase interna tendrán aquellos objetos que hacen referencia al adaptador, reteniéndolo así. Debe tener cuidado sobre cómo se administran las etiquetas (si las vistas se limpian / eliminan automáticamente no hay problema>).

  • Cómo utilizar Eclipse Memory Analyzer Tool (MAT) para analizar un hashmap
  • Necesita ayuda con el selector de colores para los elementos de ListView seleccionados
  • Encabezados ListView sin separadores de elementos de lista
  • Cómo cambiar el idioma de fecha y hora en android
  • Android: cómo cambiar el estilo de editar texto?
  • No se encontró ninguna implementación para Native UnsatisfiedLinkError Exception Android JNI
  • Spannable en android para textView
  • Si cualquier hilo de trabajo puede actualizar la interfaz de usuario en android?
  • Android dos enteros con el mismo valor que no iguala correctamente
  • Parse Json en el estudio android de String
  • Retrofit 2.0 cómo eliminar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.