Skip to content

Instantly share code, notes, and snippets.

@alwarren
Last active July 30, 2018 22:33
Show Gist options
  • Save alwarren/b65aeb4d7cf412eda191cd3bdb3ed194 to your computer and use it in GitHub Desktop.
Save alwarren/b65aeb4d7cf412eda191cd3bdb3ed194 to your computer and use it in GitHub Desktop.
Kotlin RecyclerView with LayoutInflater extension.
class RecyclerAdapter(private val users: ArrayList<User>) : RecyclerView.Adapter<RecyclerAdapter.UserHolder>() {
override fun getItemCount(): Int {
return users.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerAdapter.UserHolder {
// see Extensions.kt
val inflatedView = parent.inflate(R.layout.list_row, false)
return UserHolder(inflatedView)
}
fun insertUser(user: User) {
users.add(user)
notifyItemInserted(users.size - 1)
}
fun clear() {
val size = users.size
users.clear()
notifyItemRangeRemoved(0, size)
}
override fun onBindViewHolder(holder: RecyclerAdapter.UserHolder, position: Int) {
val user = users[position]
val firstName = user.firstName + " #" + user.id
holder.itemView.first_name.text = firstName
holder.itemView.last_name.text = user.lastName
holder.itemView.email.text = user.email
holder.itemView.setOnClickListener({
Log.d("RecyclerView", "CLICK ${user.firstName}!")
val intent = Intent(holder.itemView.context, DetailActivity::class.java)
intent.putExtra(DetailActivity.USER, user.id)
holder.itemView.context.startActivity(intent)
})
}
class UserHolder(v: View) : RecyclerView.ViewHolder(v)
}
fun ViewGroup.inflate(@LayoutRes layoutRes: Int, attachToRoot: Boolean = false): View {
return LayoutInflater.from(context).inflate(layoutRes, this, attachToRoot)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment