2015-05-01 9 views
6

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 
    } 
}) 

risposta

6

Il termine breve notazione per le classi anonime non è del tutto corretto. In realtà è una notazione breve per funzioni anonime, cioè lambda. Ovviamente sotto il cofano sono compilati per classi ma da un punto di vista del linguaggio di programmazione, le funzioni anonime non hanno identità e quindi non ha senso riferirsi alle loro istanze tramite this.

+0

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. –

-2
val animation = object : Animation() { 
     override fun applyTransformation(interpolatedTime: Float, t: Transformation) { 
      val layoutParam: RelativeLayout.LayoutParams? = playerView.layoutParams as RelativeLayout.LayoutParams? 
      layoutParam?.topMargin = convertDpToPixel(position, [email protected]).toInt() 
      playerView.layoutParams = layoutParam 
     } 
    } 
+0

Non programma in Kotlin, ma non c'è alcun riferimento a "questo" nella tua risposta. Come potrebbe rispondere all'OP? Più oltre, quando si pubblica una risposta, di solito solo un po 'di codice non è il benvenuto. Dovresti dare una spiegazione di cosa sia questo. Rimuoverò il mio downvote se lo realizzi e sento che sembra una vera risposta. –

+3

Fornisci un contesto alla tua risposta spiegando come funziona e risponde alla domanda. – TidyDev

Problemi correlati