Skip to content

Instantly share code, notes, and snippets.

@adityawid
Created May 21, 2021 07:37
Show Gist options
  • Save adityawid/07d161b1c52556e43f80ac3a36e1a66f to your computer and use it in GitHub Desktop.
Save adityawid/07d161b1c52556e43f80ac3a36e1a66f to your computer and use it in GitHub Desktop.
class MoviePagingAdapter :
PagingDataAdapter<Movie, MoviePagingAdapter.MyViewHolder>(listItemCallback) {
var onItemClick: ((Movie) -> Unit)? = null
companion object {
val listItemCallback = object : DiffUtil.ItemCallback<Movie>() {
override fun areItemsTheSame(oldItem: Movie, newItem: Movie): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Movie, newItem: Movie): Boolean {
return oldItem == newItem
}
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding: ItemMovieBinding = DataBindingUtil.inflate(
layoutInflater,
R.layout.item_movie,
parent,
false
)
return MyViewHolder(binding)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val data = getItem(position)
data?.let { holder.bind(it) }
}
inner class MyViewHolder(private val binding: ItemMovieBinding) :
RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {
val item = getItem(absoluteAdapterPosition)
if (item != null) {
onItemClick?.invoke(item)
}
}
}
fun bind(movie: Movie) {
binding.titleTextView.text = movie.title
binding.descriptionTextView.text = movie.overview
val posterURL = "https://image.tmdb.org/t/p/w500" + movie.posterPath
Glide.with(binding.imageView.context)
.load(posterURL)
.into(binding.imageView)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment