Tengo una costumbre CursorAdaptor en mi proyecto con métodos sobrescritos bindView(View view, Context context, Cursor cursor) y newView(View view, Context context, Cursor cursor).
Quiero saber por qué CursorAdapter se utilizan y cuál es la diferencia entre y usos de primordial bindView() y newView().

He leído el Sitio Del Desarrollador y este tutorial, pero todavía no la he entendido. Como soy un principiante en Android, por favor, que me ayude a entender este concepto.

  • stackoverflow.com/a/12224738/995891 uno es para la creación de una nueva re-utilizable diseño, el otro para la unión del cursor de datos a la vista
  • La premisa básica de un CursorAdapter es la gestión de un cursor de objeto de la base de datos. Aquí está una cita de docs: «Adaptador que expone los datos de un Cursor a un ListView widget».
InformationsquelleAutor Jainendra | 2012-10-01

1 Comentario

  1. 126

    Para entender esto, primero debe entender cómo BaseAdapter obras, desde CursorAdapter es una subclase de BaseAdapter.

    Android mantiene un grupo de vistas para una ListView que se le dará a usted para que usted puede reutilizar en lugar de crear una nueva vista de cada tiempo.

    En BaseAdapter, usted tendrá una función llamada getView(), para que uno de los parámetros es un View objeto denominado convertView. Básicamente, este convertView será null si la lista se carga por primera vez, y no será null una vez que comience el deslizamiento de la lista. Por lo tanto, en el getView() método de su BaseAdapter, usted comprobará si convertView es null. Si sí, usted va a hinchar. A continuación, puede utilizar la vista y el conjunto de sus elementos como normal. Esto mejorará el rendimiento del desplazamiento de un listview tremendamente.

    Un CursorAdapter hace que sea fácil de usar cuando el origen de datos de un control listview es una base de datos. En un cursor adapter, sin embargo, Android se encarga de comprobar si el convertView es null o no. En el nuevavista() método, simplemente inflar la vista y volver. En el bindView() método, conjunto de los elementos de la vista.

    Como un ejemplo, imagina un listview en un dispositivo que puede mostrar hasta 11 elementos de la lista en la pantalla. En este caso, newView() será llamado hasta 11 veces. Sin embargo, bindView() será llamado muchas veces cuando se desplaza la vista de lista. El 11 de puntos de vista que usted crea en su nuevavista método va a ser reutilizado una y otra vez a medida que se desplaza la lista.

    • ¿Por qué el downvote? ¿Hay algo malo con mi respuesta?
    • ¿Y el patrón ViewHolder? Hay todavía en uso hoy en JB y todo el nuevo api?
    • ViewHolder está ahora en desuso en favor de la utilización de void setTag(int, object) y object getTag(int) que permite adjuntar las referencias a cualquier sub-vistas a los padres a la vista (setTag(R.id.thing, thingView)) y, a continuación, volver rápidamente (getTag(R.id.thing) volvería thingView).
    • Ese es el patrón ViewHolder – developer.android.com/training/improving-layouts/…
    • Por ViewHolder patrón, supongo que te refieres a esto – developer.android.com/training/improving-layouts/… En mi experiencia personal, el hardware que se ejecuta Jellybean no le dará una diferencia notable, mientras que la reutilización de la convertView correctamente. Sin embargo, yo todavía uso el ViewHolder patrón como me parece que me permite gestionar los puntos de vista bien y el resumen de distancia de algunos de los métodos como Viewholder.getHolderForView(View v)
    • Mi error, que no es el ViewHolder patrón. @Yosi199, ViewHolder no es exactamente en desuso, pero puede causar problemas de pre-ICS si se usa con el setTag(int key, Object holder) método, porque de cómo indexado etiquetas fueron implementadas pre-ICS.
    • Estoy tratando de encontrar el dev blog que he leído, y yo no puedo! De todos modos, setTag(int, object) y getTag(int) hace todo el mismo trabajo ViewHolder hace y me dijeron que no era considerado un método más limpio. O usted puede hacer una vista personalizada de clase 🙂
    • Que en particular dev blog el post eliminado por alguna razón.. :-).. Sí, sé que hace, pero el uso de ViewHolder con setTag(int, titular) podría causar graves problemas en la pre-ICS. Yo prefiero ViewHolder simplemente porque me parece la aplicación limpiador… sólo tengo que tener cuidado con pre-ICS dispositivos.
    • para que quede claro, sin embargo, no estoy usando normalmente ViewHolder, sólo las etiquetas … ¿que causa problemas?
    • En la Pre-ICS dispositivos, si utiliza setTag(int, tag) donde tag contiene una referencia a un View, entonces usted va a terminar con fugas de la vista y su contexto(lo más probable, una Actividad). De lo contrario, estás a salvo.
    • Muchas gracias a uds por toda esta información. Voy a utilizar el patrón ViewHolder para mi aplicación actual, ya que es JB sólo comprar yo realmente apreciaría si usted podría enseñarme cómo se hace sin la ViewHolder?
    • Aquí tienes.. pastebin.com/Rn6svaYx
    • Muy útil para los novatos de android, que me Ayude para esto: stackoverflow.com/questions/19196322/…
    • como usted dijo «En la Pre-ICS dispositivos, si utiliza setTag(int, tag), donde la etiqueta contiene una referencia a una Vista, entonces usted va a terminar con fugas de la vista y su contexto(lo más probable, una Actividad). De lo contrario, estás a salvo. –» entonces, ¿cómo reutilizar vistas pre-ics con la vista de titular o no titular sería el mismo caso…no conseguir exactamente
    • No del todo. En la pre-ICS dispositivos, tendrás que usar el setTag() método que no es el causante de la fuga. La fuga es causada si utiliza el setTag(int, int) método sólo.
    • setTag(int,Objeto) si el objeto es sólo vista o itcan ser cualquier cosa, decir una Cadena causaría problema y además setTag() podemos utilizar la vista o es ViewHolder clase que contienen puntos de vista. y me gustaría saber si se puede pegar el código en el que se han hecho tanto las cosas de acuerdo a la versión de android que realizó la adaptadores por separado?
    • setTag(int, Object) causará fugas, pero si no es una Vista de la instancia, no va a ser demasiado de un problema. Es sólo cuando la etiqueta tiene una referencia a un Context que va a causar problemas como acabará la filtración del Activity.
    • Sin embargo, en setTag(), si desea conservar sólo una sola referencia a una Vista, puede utilizar el View como la etiqueta directamente. De lo contrario, escribe una ViewHolder clase para encapsular el View referencias que usted necesita.
    • Gracias 🙂 me Puede decir más acerca de cómo usted encuentra que la vista de la causa de la fuga de una actividad y también de la etiqueta hace que los efectos en la vista de lista de desplazamiento
    • Es un bug conocido.. code.google.com/p/android/issues/detail?id=18273
    • Y no, la etiqueta de por sí no debería tener un efecto en el listview de desplazamiento. Lo que tiene un efecto es lo que se hace en getView()/bindView()
    • He creado getView() y Su trabajo: ¿cómo es posible, se Puede explicar.?? El enlace está aquí: pastebin.com/W9FBG7Wt
    • CursorAdapter es una subclase de baseAdapter, y por lo tanto, se implementa getView() en su propio. Usted acaba de anular ese método, y por lo tanto, va a trabajar.
    • Qué hacer si tengo que usar ViewHolder y SubViewHolder, una Vez que han inflar el diseño de newView pero, ¿qué acerca de su hijo diseño?

Dejar respuesta

Please enter your comment!
Please enter your name here