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

Iro*_*ack 20 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"

            }
        }
    }
}    
}
Run Code Online (Sandbox Code Playgroud)

在内部类中,MyViewHolder它不允许我访问外部范围的任何变量.

即使我无法访问从 import kotlinx.android.synthetic.main.activity_main.*内部类方法内部导入的视图ID .

我能够以这种方式访问​​变量,java但我已经在stackoverflow上读了很多问题,但我还没有得到答案.

Lea*_*ira 31

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

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

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


Viv*_*ngh 13

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

class OuterClass{

var accessMe ="access me from Inner Class"

    inner class InnerClass{

       //....


        fun accessingOuterClassVariable(){

           accessMe = "Now the variable is accessed"

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

}


pou*_*uya 6

要以一种简单的方式快速回答这个问题,我会执行以下操作:

class OuterClass{

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

    //....
}
Run Code Online (Sandbox Code Playgroud)

现在CustomObject可以从任何ContextString希望这可以帮助别人。