As you can see, below is my class UserAdapter which uses latest ListAdapter which uses DiffUtil callback. In the original Adapter, I could easily implement Filterable and set me coming list to a filterable list, But here I don't seem to have control over selecting the list.
class UserAdapter(private val callback: (Int) -> Unit):
ListAdapter<User, RecyclerView.ViewHolder>(DIFF_CALLBACK) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val newsBinding = DataBindingUtil.inflate<UserDataBinding>(
LayoutInflater.from(parent.context),
R.layout.user_view,
parent,
false)
return UserViewHolder(newsBinding)
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
(holder as UserViewHolder).bindTo(getItem(position))
holder.getDataBinding().container.setOnClickListener {
callback.invoke(position)
}
holder.getDataBinding().executePendingBindings()
}
companion object {
val DIFF_CALLBACK= object: DiffUtil.ItemCallback<User>() {
override fun areItemsTheSame(oldItem: User?, newItem: User?): Boolean {
return oldItem?.id == newItem?.id
}
override fun areContentsTheSame(oldItem: User?, newItem: User?): Boolean {
return oldItem?.name == newItem?.name
&& oldItem?.email == newItem?.email
&& oldItem?.phoneNumber == newItem?.phoneNumber
&& oldItem?.city == newItem?.city
&& oldItem?.taluka == newItem?.taluka
&& oldItem?.state == newItem?.state
&& oldItem?.category == newItem?.category
&& oldItem?.profileUrl == newItem?.profileUrl
}
}
}
}