recyclerview - recycler android studio
GetView vs. ¿BindView en un CursorAdapter personalizado? (3)
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?
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()
.
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.