In Kotlin, esiste un modo per fare riferimento all'istanza listener quando si utilizza questa notazione breve per le classi anonime? In questo caso this
riferisce al contesto esterno (ad esempio l'istanza Activity
) dove view
è definito:Come fare riferimento a "questo" all'interno degli ascoltatori anonimi quando si utilizza la notazione breve?
view.setOnClickListener {
val self: View.OnClickListener = this // Not compiling, "this" references outer context
}
Quando si utilizza la notazione più dove si dichiara esplicitamente l'interfaccia da attuare e dove si sovrascrive esplicitamente il metodo callback, la ascoltatore può fare riferimento attraverso this
:
view.setOnClickListener(object: View.OnClickListener {
override fun onClick(v: View) {
val self: View.OnClickListener = this // Ok
}
})
Vedendo la "notazione breve" come lambdas spiega perché l'istanza di classe anonima non può essere referenziata. Sfortunatamente si è costretti a usare la "notazione più lunga" solo per fare riferimento a quell'istanza. –