Ejemplo de como implementar un RecyclerView usando Kotlin y la libreria Jetpack components tambien conocida como AndroidX
Definición del objeto RecyclerView
En el layout xml se debe declarar el objeto y sus propiedades
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main" />
Creando Adaptador para el RecyclerView
Se debe crear un Adaptador para la carga de datos
class MySimpleAdapter(private val mDataSet: List<String>?) :
RecyclerView.Adapter<MySimpleAdapter.MyViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val v = LayoutInflater.from(parent.context)
.inflate(R.layout.simple_list_item_1, parent, false)
return MyViewHolder(v)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val data = mDataSet?.get(position)
data?.let { holder.bindItems(it) }
}
override fun getItemCount(): Int {
return mDataSet?.size ?: 0
}
inner class MyViewHolder(v: View) : RecyclerView.ViewHolder(v) {
private val text1 = v.findViewById(android.R.id.text1) as TextView
fun bindItems(data: String) {
text1.text = data
}
}
}
El adaptador se le debe pasar el conjunto de datos, funciones y métodos a tener en cuenta
- OnCreateViewHolder: Es el encargado de cargar la vista de cada elemento
- onBindViewHolder: Es cuando un elemento es representado en pantalla o sea un candidato
- getItemCount(): Para obtener el total de elementos del conjunto de datos
- MyViewHolder: Contenedor reciclaje para los elementos del recyclerview, es donde
- bindItems: función dentro del MyViewHolder se usa para cargar los datos en los elementos visuales que conforman cada fila del RecyclerView
Definición de los elementos visuales de cada fila simple_list_item_1.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:gravity="center_vertical"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:textAppearance="?android:attr/textAppearanceListItemSmall" />
Inicialización del RecyclerView
Ahora solo queda inicializar el recyclerView en la actividad o fragmento
private lateint var mAdapter : MySimpleAdapter
...
initRecyclerView()
...
private fun initRecyclerView() {
mAdapter = MySimpleAdapter(dummyData())
recycler_view.setHasFixedSize(true)
recycler_view.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recycler_view.adapter = mAdapter
}
La carga de datos dummyData()
private fun dummyData() = listOf(
"dog",
"cat",
"owl",
"cheetah",
"raccoon",
"bird",
"snake",
"lizard",
"hamster",
"bear",
"lion",
"tiger",
"horse",
"frog",
"fish",
"shark",
"turtle",
"elephant",
"cow",
"beaver",
"bison",
"porcupine",
"rat",
"mouse",
"goose",
"deer",
"fox",
"moose",
"buffalo",
"monkey",
"penguin",
"parrot",
"chocobo"
)
Recursos
El código del ejemplo en este gist
Un comentario en “Implementado RecyclerView con Kotlin y AndroidX”