Entonces, estoy viendo este video http://www.youtube.com/watch?v=N6YdwzAvwOA y Romain Guy está mostrando cómo hacer un código de adaptador de UI más eficiente usando el método getView()
. ¿Esto también se aplica a CursorAdapters? Actualmente estoy usando bindView()
y newView()
para mis adaptadores de cursor personalizados. ¿Debería usar getView en su lugar?
CursorAdapter
tiene una implementación de getView()
que delega en newView()
y bindView()
, de forma tal que impone el patrón de reciclaje de filas. Por lo tanto, no necesita hacer nada especial con un CursorAdapter
para el reciclaje de filas si está anulando newView()
y bindView()
.
/** * @see android.widget.ListAdapter#getView(int, View, ViewGroup) */ public View getView(int position, View convertView, ViewGroup parent) { if (!mDataValid) { throw new IllegalStateException("this should only be called when the cursor is valid"); } if (!mCursor.moveToPosition(position)) { throw new IllegalStateException("couldn't move cursor to position " + position); } View v; if (convertView == null) { v = newView(mContext, mCursor, parent); } else { v = convertView; } bindView(v, mContext, mCursor); return v; }
Este código fuente CursorAdapter, claramente cursorAdapter funciona más.
La implementación de CursorAdapter
es diferente de la BaseAdapter
adaptadores BaseAdapter
como BaseAdapter
, no es necesario anular getView()
, getCount()
, getItemId()
porque esa información se puede recuperar del cursor mismo.
Dado un Cursor
, solo tiene que anular dos métodos para crear una subclase CursorAdapter
:
bindView()
: dada una vista, actualícela para mostrar los datos en el cursor provisto.
newView()
: se llama para determinar una nueva vista que entra en la lista.
El CursorAdapter
se ocupará de reciclar las vistas (a diferencia del método getView()
en el Adapter
regular). No llama a newView()
cada vez que necesita una nueva fila. Si ya tiene una View
(no null
), llamará directamente a bindView()
, de esta manera, la vista creada se reutilizará. Al dividir la creación y la población de cada vista en estos dos métodos, CursorAdapter
logra la reutilización de la vista donde, como en los adaptadores normales, ambas cosas se hacen en el método getView()
.