简体   繁体   English

如何在 Kotlin 的内部 class 中使用外部 class 的属性?

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

I have this class:我有这个 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.即使items object 在外部 class 中定义,它也不能在内部 class 中使用。 How can I use the items object in the onClick function?如何使用 onClick function 中的items onClick

You need to mark ItemViewHolder as an inner class您需要将 ItemViewHolder 标记为inner class

inner class ItemViewHolder

More info on https://kotlinlang.org/docs/reference/nested-classes.html有关https 的更多信息://kotlinlang.org/docs/reference/nested-classes.html

Just use inner Keyword只需使用inner关键字

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)
        }
    }
}

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.如果要访问内部 class 中的外部 class 的成员,则必须使用inner关键字标记内部 class。

Mark your ItemViewHolder as inner and everything should work fine.将您的ItemViewHolder标记为inner ,一切都应该正常工作。

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)
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM