无法从内部类访问变量:Kotlin android

时间:2017-09-23 04:40:34

标签: android class kotlin

我是Android中Kotlin开发的新手。在这里,我试图从它的内部类中访问类中定义的变量,如下所示。

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中以这种方式访问​​变量,但我在stackoverflow上读了很多问题,但我还没有得到答案。

3 个答案:

答案 0 :(得分:20)

您应该在适配器中使用内部修饰符。

此修饰符使内部类可以访问外部类的成员

参考:https://kotlinlang.org/docs/reference/nested-classes.html

答案 1 :(得分:6)

将嵌套类定义为内部,然后您将能够访问外部类成员变量

class OuterClass{

var accessMe ="access me from Inner Class"

inner class InnerClass{

   //....
}

}

答案 2 :(得分:1)

为了快速方便地回答此问题,我将执行以下操作:

class OuterClass{

private var accessibleInside: CustomObject? = null
inner class InnerClass{

    //....
}

现在CustomObject可以是从ContextString的任何东西,希望这对某人有帮助。