pasar objetos java class scope kotlin member

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.

  1. Clase anidada
  2. 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.