RecyclerView adapter требует трёх ключевых компонентов:
ViewHolder, который хранит ссылки на view-элементыonCreateViewHolder, onBindViewHolder и getItemCountdata class Item(val id: Int, val title: String)
class ItemAdapter(private val items: List<Item>) :
RecyclerView.Adapter<ItemAdapter.ItemViewHolder>() {
inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val titleView: TextView = view.findViewById(R.id.title)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
ItemViewHolder(LayoutInflater.from(parent.context)
.inflate(R.layout.item_layout, parent, false))
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
holder.titleView.text = items[position].title
}
override fun getItemCount() = items.size
}
Kotlin улучшает эту реализацию несколькими ключевыми способами:
equals, hashCode и copy — необходимые для сравнения в DiffUtilwith или apply упрощают привязку view внутри onBindViewHolderRecyclerView.setup()getItemCountListAdapter с DiffUtil.ItemCallback вместо обычного адаптера для эффективного, автоматического сравнения списковfindViewById для типобезопасного и null-safe доступа к viewonBindViewHolder лёгким — избегай тяжёлой логики или выделения объектовsubmitList() с ListAdapter, чтобы обновлялись только изменившиеся элементы UIKotlin data classes автоматически генерируют методы equals и hashCode, которые критичны для DiffUtil, чтобы корректно определять, когда элементы изменились в ListAdapter.
Новый — ещё не проверен сообществом
Вы