java - pasar - objetos en kotlin
No puedo llegar a ningĂșn miembro de una clase anidada en Kotlin (2)
En Kotlin, hay 2 tipos de clases anidadas.
- Clase anidada
- clase interna
Las clases anidadas no tienen permiso para acceder al miembro de la clase externa.
Si desea acceder al miembro de la clase externa en la clase anidada, entonces necesita definir esa clase anidada como clase interna.
class OuterClass{
var name="john"
inner class InnerClass{
//....
}
}
Quiero acceder a un miembro de la clase MainFragment desde la clase PersonAdapter pero ninguno de ellos está disponible. Intenté que tanto las clases como los miembros fueran públicos y privados, pero hasta ahora nada funcionó. Supongo que me estoy perdiendo algo obvio, pero no puedo entenderlo.
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)
}
}}
En Kotlin, las clases anidadas no pueden acceder a la instancia de clase externa de forma predeterminada, al igual que las static class
anidadas en Java.
Para hacer eso, agregue el modificador inner
a la clase anidada:
class MainFragment : Fragment() {
// ...
inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
// ...
}
}
Ver: Clases anidadas en la referencia del lenguaje.