How to use a property of a outer class in inner class in Kotlin?

Viewed 722

I have this class:

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    class ItemViewHolder(private val itemView: View) : ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}

Even if items object is defined in the outer class, it cannot be used in the inner class. How can I use the items object in the onClick function?

3 Answers

If you want to access the members of an outer class in the inner class, then you have to mark the inner class with inner keyword.

Mark your ItemViewHolder as inner and everything should work fine.

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    inner class ItemViewHolder(private val itemView: View) : ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}

Just use inner Keyword

import android.view.View
import androidx.recyclerview.widget.RecyclerView

class ItemsAdapter(
    val items: List<Item> = mutableListOf()
) {
    inner class ItemViewHolder(private val itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
        override fun onClick(v: View) {
            val clickedItem = items.get(adapterPosition)
        }
    }
}
Related