¿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)?
- Android Bluetooth status 133 en onCharacteristicwrite
- Los niños de Vista personalizada se null después de inflar la vista en Android
- La conversión al formato de Dalvik falló: No se puede ejecutar dex: Los archivos múltiples dex definen Lcom / squareup / okhttp / Address;
- Android: Java: usando un recurso de cadena en un Toast
- Java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
@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; }
- Comprobación de la versión de Android e introducción de constantes estáticas finales
- Android: ¿Cómo obtener el botón de flecha?
- ¿Hay algún punto en el uso de un búfer de índice con una textura en OpenGL ES (Android)?
- ¿Cómo quitar el color tint de drawables en NavigationView?
- Acabo de iniciar Java, ¿debo continuar con 7 o 6, para codificar para Android?
- Android stop service cuando salga de la aplicación
- Transmisión de audio de Android a la aplicación de escritorio
- ¿Cómo puedo reemplazar el calendario predeterminado del sistema operativo Android?
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>).
- Eclipse: "La importación java.io no se puede resolver"
- Android, cómo establecer imageview con el porcentaje en relativelayout