我想从 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 class
es 在 Java 中不能一样。
为此,将 inner
修饰符添加到嵌套类:
class MainFragment : Fragment() {
// ...
inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
// ...
}
}
请注意,inner
类包含对其包含类实例的引用,这可能会影响后者的生命周期,如果 inner
类可能会导致内存泄漏实例是全局存储的。
见:Nested classes在语言引用中
关于class - 我无法从 Kotlin 的嵌套类中联系到任何类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418194/