Skip to content

Instantly share code, notes, and snippets.

@SamueldaCostaAraujoNunes
Created August 2, 2021 23:32
Show Gist options
  • Save SamueldaCostaAraujoNunes/5769098067d858bbb4fc47c6e963456b to your computer and use it in GitHub Desktop.
Save SamueldaCostaAraujoNunes/5769098067d858bbb4fc47c6e963456b to your computer and use it in GitHub Desktop.
package br.com.samuelnunes.rickandmorty.ui.characters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import br.com.samuelnunes.rickandmortyapp.data.entities.Character
import br.com.samuelnunes.rickandmortyapp.databinding.ItemCharacterBinding
class CharactersAdapter(private val listener: CharacterItemListener) :
PagingDataAdapter<Character, CharactersViewHolder>(CharactersAdapter) {
private companion object : DiffUtil.ItemCallback<Character>() {
override fun areItemsTheSame(oldItem: Character, newItem: Character): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Character, newItem: Character): Boolean {
return oldItem == newItem
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CharactersViewHolder {
val binding = CharactersViewHolder.create(parent)
return CharactersViewHolder(binding, listener)
}
override fun onBindViewHolder(holder: CharactersViewHolder, position: Int) {
val currentItem = getItem(position)
if (currentItem != null) {
holder.bind(currentItem)
}
}
}
interface CharacterItemListener {
fun onClickedCharacter(character: Character)
}
class CharactersViewHolder(
private val itemBinding: ItemCharacterBinding,
private val listener: CharacterItemListener
) : RecyclerView.ViewHolder(itemBinding.root) {
private lateinit var character: Character
private val onClick = View.OnClickListener { listener.onClickedCharacter(character) }
companion object {
fun create(parent: ViewGroup): ItemCharacterBinding {
return ItemCharacterBinding.inflate(LayoutInflater.from(parent.context), parent, false)
}
}
init {
itemBinding.root.setOnClickListener(onClick)
}
fun bind(item: Character) {
character = item
itemBinding.character = item
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment