viewholder studio setadapter recyclerview onbindviewholder holder example ejemplo adaptador android database android-cursoradapter

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).