1: El LayoutInflater
toma sus archivos XML de diseño y crea diferentes objetos de visualización a partir de su contenido.
2: Los adaptadores están diseñados para reutilizar Vistas, cuando una Vista se desplaza para que ya no sea visible, se puede usar para una de las nuevas Vistas que aparecen. Esta vista reutilizada es la convertView
. Si esto es nulo significa que no hay una Vista reciclada y tenemos que crear una nueva, de lo contrario deberíamos usarla para evitar crear una nueva.
3: Se parent
proporciona para que pueda inflar su vista en eso para los parámetros de diseño adecuados.
Todos estos juntos pueden usarse para crear efectivamente la vista que aparecerá en su lista (u otra vista que requiera un adaptador):
public View getView(int position, @Nullable View convertView, ViewGroup parent){
if (convertView == null) {
//We must create a View:
convertView = inflater.inflate(R.layout.my_list_item, parent, false);
}
//Here we can do changes to the convertView, such as set a text on a TextView
//or an image on an ImageView.
return convertView;
}
Observe el uso de LayoutInflater
, que parent
se puede usar como argumento para ello, y cómo convertView
se reutiliza.
getView()
método en el adaptador es de la opinión de elemento de generación de unListView
,Gallery
, ...LayoutInflater
se utiliza para obtener la vista de objetos que se define en un diseño xml (el objeto raíz, normalmenteLinearLayout
,FrameLayout
oRelativeLayout
)convertView
es para reciclar. Supongamos que tiene una vista de lista que solo puede mostrar 10 elementos a la vez, y actualmente muestra el elemento 1 -> elemento 10. Cuando se desplaza hacia abajo un elemento, el elemento 1 estará fuera de la pantalla y el elemento 11 se mostrará . Para generar Vista para el elemento 11, se llamará al método getView (), yconvertView
aquí está la vista del elemento 1 (que ya no es necesario). Entonces, en su lugar, cree un nuevo objeto View para el elemento 11 (que es costoso), ¿por qué no reutilizarloconvertView
? => solo verificamos siconvertView
es nulo o no, si es nulo, crea una nueva vista, de lo contrario, la reutilizaconvertView
.parentView
es ListView o Gallery ... que contiene la vista del elemento quegetView()
genera.Nota : no llama a este método directamente, solo necesita implementarlo para indicarle a la vista principal cómo generar la vista del elemento.
fuente
Podrías ver este video sobre la vista de lista. Es de Google IO del año pasado y sigue siendo el mejor recorrido por las vistas de lista en mi mente.
http://www.youtube.com/watch?v=wDBM6wVEO70
Infla diseños (los archivos xml en su carpeta res / layout /) en objetos java como LinearLayout y otras vistas.
Mire el video, lo pondrá al día con el uso de la vista de conversión, básicamente es una vista reciclada que espera ser reutilizada por usted, para evitar crear un nuevo objeto y ralentizar el desplazamiento de su lista.
Le permite hacer referencia a su vista de lista desde el adaptador.
fuente
Cuando diseña utilizando XML, todos los elementos de la interfaz de usuario son solo etiquetas y parámetros. Antes de poder utilizar estos elementos de la interfaz de usuario (por ejemplo, TextView o LinearLayout), debe crear los objetos reales correspondientes a estos elementos xml. Para eso está el inflador. El inflador utiliza estas etiquetas y sus parámetros correspondientes para crear los objetos reales y establecer todos los parámetros. Después de esto, puede obtener una referencia al elemento de la interfaz de usuario usando findViewById ().
Este es uno interesante. Verá, se llama a getView () cada vez que se dibuja un elemento de la lista. Ahora, antes de poder dibujar el elemento, debe crearse. Ahora convertView es básicamente la última vista utilizada para dibujar un elemento. En getView (), primero infla el xml y luego usa findByViewID () para obtener los diversos elementos de la interfaz de usuario del listitem. Cuando verificamos (convertView == null) lo que hacemos es verificar que si una vista es nula (para el primer elemento), luego crearla, de lo contrario, si ya existe, reutilizarla, no es necesario volver a realizar el proceso de inflado. . Lo hace mucho más eficiente.
También debe haber encontrado un concepto de ViewHolder en getView (). Esto hace que la lista sea más eficiente. Lo que hacemos es crear un marcador de visualización y almacenar la referencia a todos los elementos de la interfaz de usuario que obtuvimos después de inflar. De esta manera, podemos evitar llamar a los numerosos findByViewId () y ahorrar mucho tiempo. Este ViewHolder se crea en la condición (convertView == null) y se almacena en convertView usando setTag (). En el bucle else lo obtenemos nuevamente usando getView () y lo reutilizamos.
El padre es un ViewGroup al que finalmente se adjunta su vista creada por getView (). Ahora, en su caso, este sería ListView.
Espero que esto ayude :)
fuente
El inflador de diseño infla / agrega XML externo a su vista actual.
getView () se llama varias veces, incluso cuando se desplaza. Entonces, si ya tiene la vista inflada, no queremos volver a hacerlo, ya que inflar es un proceso costoso ... por eso verificamos si es nulo y luego lo inflamos.
La vista principal es una sola celda de su Lista.
fuente
LayoutInflater
se utiliza para generar vistas dinámicas del XML para elListView
elemento o enonCreateView
el fragmento.ConvertView
se utiliza básicamente para reciclar las vistas que no están en la vista actualmente. Digamos que tiene un scrollableListView
. Al desplazarse hacia abajo o hacia arriba,convertView
muestra la vista que se desplazó. Esta reutilización ahorra memoria.El parámetro principal del
getView()
método da una referencia al diseño principal que tiene listView. Supongamos que desea obtener la identificación de cualquier elemento en el XML principal que puede usar:fuente
getView()
método crear nuevoView
oViewGroup
para cada fila deListview
o Spinner. Puede definir estoView
oViewGroup
en unLayout XML
archivo enres/layout
carpeta y puede darle la referencia a laAdapter
clase Object.si tiene 4 elementos en una matriz pasada al adaptador.
getView()
El método creará 4 vistas para 4 filas de Adaper.La clase LayoutInflater tiene un método inflate () que crea un objeto de vista desde el diseño de recursos XML.
fuente
También puede encontrar información útil sobre getView en la interfaz del adaptador en el archivo Adapter.java. Dice;
fuente