Por lo tanto, estoy viendo este video http://www.youtube.com/watch?v=N6YdwzAvwOA y Romain Guy muestra 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?GetView vs. ¿BindView en un CursorAdapter personalizado?
Respuesta
CursorAdapter
tiene una implementación de getView()
que los delegados a newView()
y bindView()
, de tal manera que hace cumplir el patrón de filas de reciclaje. 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.
La aplicación CursorAdapter
es diferente de los adaptadores regulares sub-clasificando como BaseAdapter
, que no es necesario para anular getView()
, getCount()
, getItemId()
porque esa información se puede recuperar desde el cursor en sí.
dado un Cursor
, sólo es necesario para anular dos métodos para crear una subclase CursorAdapter
:
bindView()
: Dado un punto de vista, que se actualizará para mostrar los datos en el cursor proporcionado.
newView()
: Esto se llama para determinar una nueva vista que entra en la lista.
El CursorAdapter
se ocupará de las vistas de reciclaje (a diferencia del método getView()
en el Adapter
normal). No llama al newView()
cada vez que necesita una nueva fila. Si ya tiene un View
(no null
), llamará directamente al 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, el CursorAdapter
logra la reutilización de vista donde, como en los adaptadores normales, ambas cosas se realizan en el método getView()
.
Gracias, muy útil. – LarsH
- 1. Cómo reemplazar CursorAdapter bindView
- 2. SimpleCursorAdapter vs CursorAdapter?
- 3. Android: Problema con newView y bindView en CustomCursorAdapter personalizado
- 4. CursorAdapter vs ResourceCursorAdapter
- 5. NullPointerException en el adaptador personalizado getView
- 6. CursorAdapter vs ArrayAdapter para un ListView
- 7. Android: ¿el patrón ViewHolder se implementa automáticamente en CursorAdapter?
- 8. ¿Este CursorAdapter personalizado para un ListView está codificado correctamente para Android?
- 9. Cuando getView() en ArrayAdapter se llama
- 10. ORMLite con CursorAdapter en Android
- 11. Cómo eliminar un elemento seleccionado de ListView usando CursorAdapter
- 12. Custom ArrayAdapter setPrincipal en getView
- 13. Android: cómo usar CursorAdapter?
- 14. Separadores de ListView que usan un CursorAdapter
- 15. Android texto completo autocompletado y Cursoradapter
- 16. Explicación del método getView() de un ArrayAdapter
- 17. Android Adapter multiple getView
- 18. SimpleCursorAdapter y CursorAdapter
- 19. Obtener el cursor correcto en CustomCursor Adapater getView()
- 20. ¿Por qué Wrap_Content dispara BindView más de una vez?
- 21. App.Config vs archivo XML personalizado
- 22. ¿Qué CursorAdapter tengo que usar?
- 23. Intentar anular getView en un SimpleCursorAdapter da NullPointerExceptio
- 24. getView en fragmentos devuelve a veces nulo
- 25. Llamadas múltiples de getView() en GridView
- 26. Core Graphics Vs Imágenes para un botón personalizado
- 27. Creación de un adaptador de cursor simple personalizado
- 28. No se puede marcar/desmarcar CheckedTextView dentro de getView
- 29. Resaltado de sintaxis personalizado para VS 2008
- 30. Validador de campo personalizado Django vs.
¿Cómo aplicaría el patrón ViewHolder? ¿Lo dividiría entre newView() y bindView()? –
@Scienceprodigy: en 'newView()', crearía el 'ViewHolder' para la fila y lo asociaría con' setTag() '. En 'bindView()', recuperaría 'ViewHolder' mediante' getTag() '. – CommonsWare
Gracias, eso funciona. Sin embargo, estoy teniendo problemas con el reciclaje de las vistas, porque tengo elementos de la lista que tienen un encabezado que se GONE por defecto, que utilizo para mostrar las secciones con fecha. Todo se muestra bien hasta que arrojo la lista hacia arriba o hacia abajo, luego hay encabezados que aparecen donde no deberían estar. –