studio - Android: ¿Se implementa automáticamente el patrón de ViewHolder en CursorAdapter?
recyclerview setadapter (2)
Siempre uso el patrón ViewHolder
en mis clases personalizadas de ArrayAdapter
. Sin embargo, en CursorAdapter
el método getView()
no es obligatorio, se debe sobrescribir, pero tiene los métodos bindView
y newView
.
Mi pregunta es: ¿ CursorAdapter
vuelve a utilizar las vistas implementando internamente el patrón ViewHolder
o necesita ser codificado como lo hacemos normalmente en ArrayAdapter
personalizado? Si necesita ser codificado, ¿cuál es la forma correcta de hacerlo?
Actualizar
Estoy usando android.support.v4.widget.CursorAdapter
Mi pregunta es: ¿CursorAdapter vuelve a utilizar las vistas implementando internamente el patrón ViewHolder o necesita ser codificado como lo hacemos normalmente en ArrayAdapter personalizado?
No estoy seguro de a qué se refiere el patrón de ViewHolder
. Si se refiere a tener una clase auxiliar para almacenar en caché en busca de vista cada vez (y establecerlo como una etiqueta para la View
fila), entonces la respuesta es no. Si desea implementar este patrón, deberá configurar el titular (buscar las vistas en la vista de filas con findViewById
) en el newView
método newView
y luego establecerlo como la etiqueta para la vista de filas. Luego, en el método bindView
, puede llamar a getTag
, recuperar el titular y usarlo. Un ejemplo:
// custom CursorAdapter ...
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View rowView = ((LayoutInflater) context
.getSystemService("layout_inflater")).inflate(
R.layout.row_layout, parent, false);
ViewHolder holder = new ViewHolder();
holder.v1 = rowView.findViewById(R.id.v1);
holder.v2 = rowView.findViewById(R.id.v2);
rowView.setTag(holder);
return rowView;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
// use the holder filled with views
// hlder.v1.setSomething
}
class ViewHolder {
View v1, v2;
}
// ...
Si te estás refiriendo a la convertView
(como en los adaptadores que no están basados en el Cursor
), entonces la respuesta es sí, el método getView
implementa este patrón, solo necesitas implementar los bindView
métodos newView
y bindView
y tienes la garantía de obtener una vista que fue reciclado (si es posible en ese momento).
No ha indicado si está utilizando la versión de plataforma o la versión de biblioteca de soporte de CursorAdapter
. En cualquier caso, Android es de código abierto, ¡así que puedes buscarlo por ti mismo!
android.support.v4.widget.CursorAdapter
android.widget.CursorAdapter
Si usa Chrome, ¡el componente Búsqueda de referencia del SDK de Android es extremadamente útil!