2017-09-23 84 views
4

我在android系統是新科特林發展。這裏我試圖從它的內部類訪問一個類中定義的變量,如下所示。無法從內部類訪問的變量:科特林的Android

class MainActivity : AppCompatActivity() { 

    var frags: MutableList<Fragment> = mutableListOf() 

//.............onCreate and other methods .... 

    internal class CustAdapter(var arrayList: ArrayList<NavigationData>) : RecyclerView.Adapter<CustAdapter.MyViewHolder>() { 
    override fun onBindViewHolder(holder: MyViewHolder?, position: Int) { 
     holder!!.bindItems(arrayList[position]) 
    } 

    override fun getItemCount(): Int { 
     return arrayList.size 
    } 
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustAdapter.MyViewHolder { 
     val v = LayoutInflater.from(parent.context).inflate(R.layout.navigation_item, parent, false) 
     return MyViewHolder(v) 
    } 

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { 
     fun bindItems(data: NavigationData) { 


      itemView.setOnClickListener { 
        frags.add(BoardFrag()) ///// here i'm getting error "unresolved symbol" 

      } 
     } 
    } 
}  
} 

裏面的內部類MyViewHolder它不允許我訪問任何外部變量的變量。

即使我無法訪問從 import kotlinx.android.synthetic.main.activity_main.*進口內內類方法視圖ID。

我能夠訪問的變量以這樣的方式在java但我已經在計算器讀了很多問題,但我沒有得到答案。

+1

使用內部,而不是內部=) –

回答

8

你應該在你的適配器使用內部修改。

這個修改使得內部類可以訪問外部類

參考成員:https://kotlinlang.org/docs/reference/nested-classes.html

+0

感謝您的解決方案。這個小小的錯誤讓我在兩天之內陷入困境,而你又拯救了我的另一天 –

+0

不客氣!內部和內部名稱是真正棘手......有保護保留會更好我想 –

+0

我不知道之間的區別保護和內內,但我會嘗試梳理出來我自己 –

1

定義你的嵌套類爲內,那麼你將能夠訪問外部類的成員變量

class OuterClass{ 

var accessMe ="access me from Inner Class" 

inner class InnerClass{ 

    //.... 
} 

}