我无法从Kotlin的嵌套类中获取任何类成员

问题描述:

我想从PersonAdapter类访问MainFragment类的成员,但它们都不可用。我试图让班级和成员都公开和私人,但迄今为止没有任何工作。 我想我错过了一些明显的东西,但我无法弄清楚。我无法从Kotlin的嵌套类中获取任何类成员

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) 
     } 
    }} 

在科特林,嵌套类不能默认在Java访问外部类的实例,就像嵌套static class ES。

为了做到这一点,在inner改性剂添加到嵌套类:

class MainFragment : Fragment() { 
    // ... 

    inner class PersonAdapter() : RecyclerView.Adapter<ViewHolder>() { 
     // ... 
    } 
} 

请参见:语言参考

+1

我甚至读过那个页面......但由于一些愚蠢的原因,我试图让'onBindViewHolder'方法在内部...... – ftibi93

在科特林Nested classes,有两种类型的嵌套类的。

  1. 嵌套类
  2. 内类

嵌套类不允许访问外部类中的成员。

如果您想要访问嵌套类中的外部类的成员,那么您需要将该嵌套类定义为内部类。

class OuterClass{ 

    var name="john" 

    inner class InnerClass{ 

     //.... 
    } 

}