【问题标题】:How to use a property of a outer class in inner class in Kotlin?如何在 Kotlin 的内部类中使用外部类的属性?
【发布时间】:2020-06-11 12:29:25
【问题描述】:

我有这门课:

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

即使items对象在外部类中定义,也不能在内部类中使用。如何在onClick 函数中使用items 对象?

【问题讨论】:

  • 您应该将“items”列表作为参数传递给 ItemViewHolder。
  • @AnimeshSahu 那里没有“非此即彼”。 this@ItemsAdapter.items 仅适用于 inner

标签: android kotlin inner-classes


【解决方案1】:

您需要将 ItemViewHolder 标记为 inner

inner class ItemViewHolder

更多信息https://kotlinlang.org/docs/reference/nested-classes.html

【讨论】:

  • 不知道我应该明确添加该内部关键字。成功了,谢谢!
【解决方案2】:

只需使用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)
        }
    }
}

【讨论】:

    【解决方案3】:

    如果你想在内部类中访问外部类的成员,那么你必须用inner关键字标记内部类。

    将您的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)
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-09
      • 2014-08-10
      • 2019-09-03
      • 1970-01-01
      相关资源
      最近更新 更多