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!