RecyclerView
Facilita el listado de una gran cantidad de datos, de una manera más eficiente. Cuando un elemento (View holder) se desplaza fuera de la pantalla, RecyclerView no destruye la vista. En cambio, reutiliza la vista para los elementos nuevos que se desplazaron y ahora se muestran en pantalla. Consta de tres pates importantes:
Dataset
Es un conjunto de datos que se va a mostrar en el RecyclerView. Puede ser un array o ArrayList de objetos.
Adapter
El adaptador se encarga de gestionar el dataset (añadir, editar o eliminar elementos) de la lista, a través de sus métodos. Antes de definir los métodos debemos saber que ViewHolder Contiene los componentes visuales de cada elemento de la lista.
onCreateViewHolder
Crea y luego inicializa el ViewHolder sin datos especificos.
Sintaxis
MainActivity.kt
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.list_content, parent, false)
return ViewHolder(view)
}
Parámetros
- parent: Es en el que se agregará la nueva vista creada después de que se vincule a una posición del adaptador.
- viewType: El tipo de la vista creada.
- ViewHolder: Vista creada.
- view: Instancia el diseño xml (list_content.xml).
onBindViewHolder
Recupera y enlaza los datos(dataset) con cada ViewHolder
Sintaxis
MainActivity.kt
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val videogame = values[position]
holder.nameTextView.text = videogame.name
holder.dateTextView.text = videogame.date
holder.posterImageView.let {
Glide.with(holder.itemView.context)
.load(videogame.url)
.into(it)
}
holder.itemView.setOnClickListener { v ‐>
val intent = Intent(v.context, DetailActivity::class.java).apply {
putExtra("id", videogame.id)
putExtra("name", videogame.name)
putExtra("description", videogame.description)
putExtra("url", videogame.url)
}
v.context.startActivity(intent)
}
}
Parámetros
- holder: Contiene la vista que no se pudo reciclar debido a su estado transitorio
- position: Contiene la posición de la vista.
- videogame: Conjunto de datos (Dataset).
- intent: Realiza la comunicación con la otra actividad.
- putExtra: Añade datos al navegar a la otra actividad.
- startActivity: Inicia la navegación navegar a la otra actividad.
getItemCount
Devuelve la cantidad de elementos de lista que se va ha mostrar.
override fun getItemCount() = values.size
LayoutManager
Es el gestor del diseño que va a definir la disposición de los elementos en el interfaz.