Last active
May 16, 2021 17:14
-
-
Save bigyanthapa/2ce2551bf33e136d621732de73bb0ca6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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