Skip to content

Commit

Permalink
fix : DiffUtil과 ListAdapter 사용 #3
Browse files Browse the repository at this point in the history
  • Loading branch information
SeonHwan-Kim committed Apr 27, 2023
1 parent fb4aa20 commit 209a963
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ package org.android.go.sopt.presentation.main.home
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import org.android.go.sopt.data.Dog
import org.android.go.sopt.databinding.ItemDogBinding

class DogAdapter(context: Context) : RecyclerView.Adapter<DogAdapter.DogViewHolder>() {
class DogAdapter(context: Context) : ListAdapter<Dog, DogAdapter.DogViewHolder>(DogDiffCallback()) {
private val inflater by lazy { LayoutInflater.from(context) }

private var dogList: List<Dog> = emptyList()

class DogViewHolder(private val binding: ItemDogBinding) :
RecyclerView.ViewHolder(binding.root) {
fun onBind(dog: Dog) {
Expand All @@ -26,14 +26,17 @@ class DogAdapter(context: Context) : RecyclerView.Adapter<DogAdapter.DogViewHold
return DogViewHolder(binding)
}

override fun getItemCount(): Int = dogList.size

override fun onBindViewHolder(holder: DogViewHolder, position: Int) {
holder.onBind(dogList[position])
holder.onBind(getItem(position))
}
}

class DogDiffCallback : DiffUtil.ItemCallback<Dog>() {
override fun areItemsTheSame(oldItem: Dog, newItem: Dog): Boolean {
return oldItem.name == newItem.name
}

fun setDogList(dogList: List<Dog>) {
this.dogList = dogList.toList()
notifyDataSetChanged()
override fun areContentsTheSame(oldItem: Dog, newItem: Dog): Boolean {
return oldItem == newItem
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class HomeFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
val titleAdapter = TitleAdapter(requireContext())
val dogAdapter = DogAdapter(requireContext())
dogAdapter.setDogList(viewModel.mockDogList)
dogAdapter.submitList(viewModel.mockDogList)
binding.rvHomeDog.adapter = ConcatAdapter(titleAdapter, dogAdapter)
}

Expand Down

0 comments on commit 209a963

Please sign in to comment.