2012-09-15 10 views
8

Soy nuevo en la programación android y hago los primeros pasos con los adaptadores (para un ListView).anulando Adapter.getView

Anulación del Adapter.getView A menudo veo cosas como esta:

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = null; 

    if (convertView == null) { 
     LayoutInflater inflater = (LayoutInflater) parent.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.table_row, null); 
    } else { 
     itemView = convertView; 
    } 

    // play with itemView 

    return itemView; 
} 

Mi pregunta es ¿qué habla en contra de esto:

public View getView(int position, View convertView, ViewGroup parent) { 

    View itemView = super(position, convertView, parent); 

    // play with itemView 

    return itemView; 
} 

Esto parece funcionar para mí, pero estoy seguro de que hay una gran punto que me falta: D

Gracias por leer y lo siento por mi mal inglés ...

Respuesta

6

Puede utilizar

View itemView = super(position, convertView, parent); 

si sólo se está derivando de "listo para usar" adaptadores (no BaseAdapter), como SimpleAdapter, o ArrayAdapter, ya que ya tienen su implementación para el getView().

Échales un vistazo: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/ArrayAdapter.java#361 para ArrayAdapter, y http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/SimpleAdapter.java#113 para SimpleAdapter.

Si que se derivan de BaseAdapter, tendrá manualy aplicar todo el método, como se ha descrito en el primer ejemplo, porque no tiene que salir de la caja: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r2.1/android/widget/BaseAdapter.java#BaseAdapter

1

Si se refiere a que esta pieza de código:

if (convertView == null) { 
    LayoutInflater inflater = (LayoutInflater) parent.getContext() 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    itemView = inflater.inflate(R.layout.table_row, null); 
} else { 
    itemView = convertView; 
} 

parece innecesario para usted: este pedazo de código permite Android para crear un número relativamente pequeño de células (igual al número de células que son visibles en la pantalla + -), y luego "reciclar" estas celdas: úsalas una y otra vez mientras el usuario se desplaza por la lista, en lugar de crear una celda para cada objeto en su matriz. Esto le ayudará con:

  1. memoria Ahorro - porque no se crea vista para cada elemento de la matriz de

  2. Ahorro de uso de la CPU - la creación de un objeto de vista de archivo XML ("inflar ") es una tarea relativamente costosa y hacerlo para cada elemento de la matriz puede ahogar su subproceso de interfaz de usuario