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.