Kotlin

2017-07-31 32 views
6

İç içe geçmiş bir sınıftan herhangi bir sınıf üyesine ulaşamıyorum PersonAdapter sınıfından MainFragment sınıfının bir üyesine erişmek istiyorum ancak bunların hiçbiri kullanılamıyor. Hem sınıfları hem de üyeleri kamuya ve özel yapmaya çalıştım ama şu ana kadar hiçbir şey işe yaramadı. Sanırım bariz bir şeyi kaçırıyorum ama anlayamıyorum.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) 
     } 
    }} 

cevap

16

KOTLIN, iç içe sınıflar Java, varsayılan olarak tıpkı iç içe static class es dış sınıf örneğini erişemez.

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

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

See:

iç içe sınıfa inner değiştirici ekleyin Bunu yapmak için Nested classes KOTLIN olarak dil referans

+1

Bu sayfayı bile okudum ... ama bazı aptal nedenlerle 'onBindViewHolder' yöntemini iç ... – ftibi93

5

yılında, iç içe sınıfları 2 türü vardır.

  1. iç içe Sınıf
  2. iç Sınıf

İç içe sınıf dış sınıfının üyesine erişmek için izin verilmez.

Yuvalanmış sınıftaki dış sınıf üyesine erişmek isterseniz, iç içe geçmiş sınıfı iç sınıf olarak tanımlamanız gerekir.

class OuterClass{ 

    var name="john" 

    inner class InnerClass{ 

     //.... 
    } 

}