class - 我无法从 Kotlin 的嵌套类中联系到任何类成员

标签 class kotlin scope member

我想从 PersonAdapter 类访问 MainFragment 类的成员,但它们都不可用。我尝试将类(class)和成员都设为公开和私有(private),但到目前为止没有任何效果。 我想我错过了一些明显的东西,但我就是想不通。

class MainFragment : Fragment() {
    lateinit var personAdapter: PersonAdapter
    lateinit var personListener: OnPersonSelected
    private var realm: Realm by Delegates.notNull()
    lateinit var realmListener: RealmChangeListener<Realm>

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val v = inflater.inflate(R.layout.fragment_main, container, false)
        return v
    }

    class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
        var localPersonList = personList

        override fun onBindViewHolder(holder: ViewHolder, position: Int) {
            holder.bindItems(localPersonList[position])

            holder.itemView.setOnClickListener {
                Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
                //I want to reach personListener from here
            }
        }

        override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
            val v = LayoutInflater.from(parent!!.context).inflate(R.layout.person_list_item, parent, false)
            return ViewHolder(v)
        }
    }}

最佳答案

在 Kotlin 中,嵌套类默认不能访问外部类实例,就像嵌套 static classes 在 Java 中不能一样。

为此,将 inner 修饰符添加到嵌套类:

class MainFragment : Fragment() {
    // ...

    inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
        // ...
    }
}

请注意,inner 类包含对其包含类实例的引用,这可能会影响后者的生命周期,如果 inner 类可能会导致内存泄漏实例是全局存储的。

见:Nested classes在语言引用中

关于class - 我无法从 Kotlin 的嵌套类中联系到任何类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418194/

相关文章:

intellij-idea - 如何在 IntelliJ 中运行 Kotlin Koans?什么是 "Main class"?

android - 如何对 session 室数据进行分类?

java - 如何解决 ClassNotFoundException?

c++ 指向函数的指针

python - 如何按定义顺序获取类变量列表?

ios - 无法访问函数外定义的字典

c - C11 中类型名称作用域的概念

java - 声明的包测试与预期的包不匹配

python-3.x - Kotlin TCP套接字客户端无法正常工作的Python服务器

c++ - 通过宏从函数定义(并声明和使用)全局变量