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

Я хочу получить доступ к классу 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{ //.... } } 
Intereting Posts
Maven с Kotlin 1.2: Требуемый класс отсутствовал kotlin / reflection / KDeclarationContainer Кинжал и Котлин. Кинжал не генерирует классы компонентов Strange java.lang.ClassCastException при использовании вызова Как я могу использовать модель представления, с sqlite и широковещательным приемником для обновления пользовательского интерфейса? Обрезающий наблюдательный делегат Kotlin: UnsupportedOperationException для reified generic с оператором get / set Как объекты и сопутствующие объекты Kotlin и ленивые работы с памятью Как обратиться к анонимному внутреннему классу в Котлине? Десериализация объекта Kotlin с помощью GSON Gradle 3.0.0 (в Android Studio 3.0) изменяет порядок последовательности задач (при компиляции с модулем Kotlin)? Kotlin сортирует массив по значению в диапазоне Использование Moshi с несколькими полями ввода Почему метод ByteBuffer putShort (значение) работает неправильно в моем случае? error: не удается найти класс символов для добавления класса kotlin в класс java в android studio 3.0 stable Функция инициализации массива Котлина