studio recyclerview recycler implement ejemplo cardview cards android user-interface adapter

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.