在Kotlin中,有没有办法在匿名类中使用这个简短表示法时引用侦听器实例?在这种情况下,this引用外部上下文(例如Activity实例)view定义:
view.setOnClickListener {
val self: View.OnClickListener = this // Not compiling, "this" references outer context
}
Run Code Online (Sandbox Code Playgroud)
当使用较长的表示法时,您明确声明要实现的接口以及显式覆盖回调方法的位置,可以通过this以下方式引用侦听器:
view.setOnClickListener(object: View.OnClickListener {
override fun onClick(v: View) {
val self: View.OnClickListener = this // Ok
}
})
Run Code Online (Sandbox Code Playgroud)
jam*_*ian 10
您可以通过在“this”引用前添加@ActivityName 来解决该问题。例如,如果您的活动名称是 MainActivity,则解决方案是:
view.setOnClickListener {
val self: View.OnClickListener = this@MainActivity
}
Run Code Online (Sandbox Code Playgroud)
匿名类的短符号一词并不完全正确.它实际上是匿名函数的简短符号,即lambdas.当然,它们被编译为类,但从编程语言的角度来看,匿名函数没有标识,因此通过引用它们的实例没有意义this.
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |