Skip to content

Instantly share code, notes, and snippets.

@bigyanthapa
Last active May 16, 2021 17:14
Show Gist options
  • Save bigyanthapa/2ce2551bf33e136d621732de73bb0ca6 to your computer and use it in GitHub Desktop.
Save bigyanthapa/2ce2551bf33e136d621732de73bb0ca6 to your computer and use it in GitHub Desktop.
class UserAdapter : RecyclerView.Adapter<UserAdapter.UserViewHolder> {
var users: List<User> = emptyList()
set(value) {
field = value
notifyDataSetChanged()
}
// This keeps track of the currently selected position
var selectedPosition by Delegates.observable(-1) { property, oldPos, newPos ->
if (newPos in items.indices) {
notifyItemChanged(oldPos)
notifyItemChanged(newPos)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val viewBinding: ViewListItemBinding =
DataBindingUtil.inflate(layoutInflater,R.layout.view_list_item, parent, false)
return UserViewHolder(viewBinding)
}
override fun getItemCount(): Int = users.size
override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
if (position in users.indices){
holder.bind(items[position], position == selectedPosition)
holder.itemView.setOnClickListener { selectedPosition = position }
}
}
inner class UserViewHolder(private val viewBinding: ViewListItemBinding) :
RecyclerView.ViewHolder(viewBinding.root) {
fun bind(user: User, selected: Boolean) {
with(event) {
viewBinding.tvUserName.text = name
viewBinding.tvAddress.text = address
viewBinding.tvAge.text = "$age"
viewBinding.btnChecked.isChecked = selected
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment