sealed clsss StringItem {
abstract
val str: String
abstract
fun bind(binding: AdapterItemBinding)
data
class
A(override val str: String) : StringItem {
override fun bind(binding: AdapterItemBinding) {
binding.item.text = str +
1
}
}
data
class
B(override val str: String) : StringItem {
override fun bind(binding: AdapterItemBinding) {
binding.item.text = str +
2
}
}
data
class
C(override val str: String) : StringItem {
override fun bind(binding: AdapterItemBinding) {
binding.item.text = str +
3
}
}
}
class
Adapter : ListAdapter<StringItem, Adapter.ViewHolder>(diffUtil) {
inner
class
ViewHolder(
private
val binding: AdapterItemBinding) : RecyclerView.ViewHolder(binding.root) {
fun bind(item: StringItem) {
item.bind(binding)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return
ViewHolder(AdapterItemBinding.inflate(LayoutInflater.from(parent.context), parent,
false
))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(getItem(position))
}
companion object {
val diffUtil = object : DiffUtil.ItemCallback<StringItem>() {
override fun areItemsTheSame(oldItem: StringItem, newItem: StringItem): Boolean {
return
oldItem == newItem
}
override fun areContentsTheSame(oldItem: StringItem, newItem: StringItem): Boolean {
return
oldItem == newItem
}
}
}
}
val stringItems = listOf(
ListItem.A(
"aaaa"
),
ListItem.B(
"bbbb"
),
ListItem.C(
"cccc"
),
)
adapter.submitList(stringItems)