ListAdapterのサンプル実装

abstract class ListAdapter : RecyclerView.Adapter developer.android.com

サンプル実装

data class Tweet(
    val text: String,
    val id: Long,
)


class TweetAdapter(
    private val onClick: (Tweet) -> Unit
) : ListAdapter<Tweet, TweetAdapter.ItemViewHolder>(DIFF_UTIL_ITEM_CALLBACK) {

    class ItemViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
        ---
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
        val adapterLayout =
            LayoutInflater.from(parent.context).inflate(R.layout.list_tweet, parent, false)

        return ItemViewHolder(adapterLayout)
    }

    override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
        val tweet = getItem(position)
        holder.view.setOnClickListener { onClick(tweet) }
    }

    companion object {
        val DIFF_UTIL_ITEM_CALLBACK = object : DiffUtil.ItemCallback<Tweet>() {
            override fun areItemsTheSame(oldItem: Tweet, newItem: Tweet) =
                oldItem.id == newItem.id

            override fun areContentsTheSame(oldItem: Tweet, newItem: Tweet) =
                oldItem == newItem
        }
    }
}