Je souhaite accéder à un membre de la classe MainFragment à partir de la classe PersonAdapter mais aucun d'eux n'est disponible. J'ai essayé de rendre les cours et les membres publics et privés aussi mais jusqu'à présent, rien n'a fonctionné. Je suppose que je manque quelque chose d'évident, mais je ne peux pas le comprendre.
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)
}
}}
Dans Kotlin, les classes imbriquées ne peuvent pas accéder à l'instance de classe externe par défaut, tout comme les imbriquées static class
es en Java.
Pour ce faire, ajoutez le modificateur inner
à la classe imbriquée:
class MainFragment : Fragment() {
// ...
inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() {
// ...
}
}
Voir: Classes imbriquées dans la référence du langage
Dans Kotlin, il existe 2 types de classes imbriquées.
Les classes imbriquées ne sont pas autorisées à accéder au membre de la classe externe.
Si vous souhaitez accéder au membre de la classe externe dans la classe imbriquée, vous devez définir cette classe imbriquée comme classe interne.
class OuterClass{
var name="john"
inner class InnerClass{
//....
}
}