I have implemented paging3 for my android project. To avoid duplicated items, I created a DiffUtil.ItemCallback object as follow;
companion object {
val diffCallback = object : DiffUtil.ItemCallback<Person>() {
override fun areItemsTheSame(oldItem: Person, newItem: Person): Boolean {
return oldItem.id == newItem.id
}
override fun areContentsTheSame(oldItem: Person, newItem: Person): Boolean {
return oldItem.id == newItem.id
}
}
}
And I used that object in PagingDataAdapter;
class PersonAdapter : PagingDataAdapter<Person, PersonViewHolder>(diffCallback)
In View, I got the PaginData from viewModel and submit it into the adapter.
private fun observeData() {
lifecycleScope.launch {
viewModel.getPeople().observe(this@MainActivity, {
pagingAdapter.submitData(lifecycle, it)
})
}
In my opinion, the persons who have the same id will not be included in the adapter thanks to DiffUtil.ItemCallback. But it didn't happen. RecyclerView prints every person object even if they have the same id.
How can I distinct the data by id? Why didn't DiffUtil.ItemCallback work? Thanks.