Я не могу связаться с членом класса из вложенного класса в Котлин

Я хочу получить доступ к классу MainFragment из класса PersonAdapter, но ни один из них не доступен. Я попробовал сделать и классы, и члены публичными и частными, но пока ничего не получилось. Наверное, мне не хватает чего-то очевидного, но я просто не могу понять.

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>() { // ... } } 

См .: Вложенные классы в ссылке на язык

В Котлине существует 2 типа вложенных классов.

  1. Вложенный класс
  2. внутренний класс

Вложенному классу не разрешается обращаться к члену внешнего класса.

Если вы хотите получить доступ к члену внешнего класса во вложенном классе, вам необходимо определить этот вложенный класс как внутренний класс.

 class OuterClass{ var name="john" inner class InnerClass{ //.... } }