2012-10-12 85 views
30

Siempre utilizo el patrón ViewHolder en mis clases personalizadas ArrayAdapter. Sin embargo, en CursorAdapter no es obligatorio anular el método getView(), pero tiene los métodos bindView y newView.Android: ¿el patrón ViewHolder se implementa automáticamente en CursorAdapter?

Mi pregunta es - ¿CursorAdapter reutiliza las vistas mediante la implementación interna del patrón ViewHolder o necesita ser codificado como lo hacemos normalmente en la costumbre ArrayAdapter? Si necesita ser codificado, ¿cuál es la forma correcta de hacerlo?

actualización

estoy usando android.support.v4.widget.CursorAdapter

Respuesta

39

Mi pregunta es - hace CursorAdapter reutiliza vistas por el interior implementar el patrón ViewHolder o necesita ser codificado ya que normalmente hacemos en ArrayAdapter personalizada?

No estoy seguro de a qué se refiere por el patrón ViewHolder. Si se refiere a tener una clase auxiliar para almacenar en caché buscando ver cada vez (y establecerlo como una etiqueta para la fila View), entonces la respuesta es no. Si desea implementar este patrón, deberá configurar el titular (busque las vistas en la vista de fila con findViewById) en el método newView y luego configúrelo como la etiqueta para la vista de fila. Luego, en el método bindView, puede llamar al 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 se refiere a la convertView ser reutilizado (como en Cursor adaptadores no basados), entonces la respuesta es sí, el método getView implementa este patrón, sólo tiene que poner en práctica los métodos newView y bindView y tiene la garantía de obtener una vista que fue reciclada (si es posible en ese momento).

+0

Por 'ViewHolder' Me refiero al patrón' Holder' ... –

+0

@Mahendra Así que fue el primer caso. No, el patrón del titular no está implementado en 'CursorAdapter' (del SDK o paquete de compatibilidad). – Luksprog

+0

Mi consulta es más acerca de "codificar el' Titular' en un adaptador personalizado o no es obligatorio '? Veo que la clase 'CursorAdapter' también tiene el método' getView' .. –

Cuestiones relacionadas