# Frage zu Kotlin source code



## dgtKotlin (31. Mai 2020)

Hi,
arbeite mich gerade in Kotlin ein (unter Android Studio 3.6.3). Kann mir jemand erklären, was 

```
{it: View!
```
beim Aufruf des onClickListener eines buttons macht? Ich habe bisher nichts dazu gefunden bei Google & Co.
Es geht darum, das ein bitmap per Knopfdruck gedreht werden soll. Hier mal der Code des onClickListeners:


```
flip_btn.setOnClickListener {it: View!
    if (isFront) {
        front_anim.setTarget(card_front)
        back_anim.setTarget(card_back)
        front_anim.start()
        back_anim.start()
        isFront = false
    } else {
        front_anim.setTarget(card_back)
        back_anim.setTarget(card_front)
        back_anim.start()
        front_anim.start()
        isFront = true
    }
        }
```

Das stammt aus dem online Tutorial "Flip Card Animation in Android Studio"
in YouTube von "doctor code"




Habe auch dort schon nachgefragt, aber leider bisher keine Antwort erhalten. Vielleicht kann mir hier ja weiter geholfen werden.


----------



## mihe7 (31. Mai 2020)

Guckst Du: https://kotlinlang.org/docs/reference/java-interop.html#notation-for-platform-types


----------



## dgtKotlin (31. Mai 2020)

mihe7 hat gesagt.:


> Guckst Du: https://kotlinlang.org/docs/reference/java-interop.html#notation-for-platform-types


Ok - Danke, da wird das Ausrufungszeichen klar. Aber wie ist das im Zusammenhang mit "i:" zu sehen? Kannst Du das mir als Beginner auch noch erklaeren?


----------



## mihe7 (31. Mai 2020)

Zwar habe ich bislang noch nie etwas mit Kotlin gemacht, aber ich versuch es mal  

Die Methode `setOnClickListener` erwartet einen `View.OnClickListener`, der die abstrakte Methode `fun onClick(v: View!): Unit` implementiert (s. https://developer.android.com/reference/kotlin/android/view/View.OnClickListener).

`it` steht in Kotlin implizit für den einzigen Parameter eines Lambdas. 

Ich gehe mal davon aus, dass es auch ohne `it : View!` funktionieren würde und durch die Angabe explizit ein Lambda erstellt wird, das einen Parameter vom Typ `View!` erwartet. Das scheint mir ähnlich sinnvoll wie die @Override-Annotation in Java.


----------



## dgtKotlin (1. Jun 2020)

mihe7 hat gesagt.:


> Ich gehe mal davon aus, dass es auch ohne `it : View!` funktionieren würde und durch die Angabe explizit ein Lambda erstellt wird, das einen Parameter vom Typ `View!` erwartet. Das scheint mir ähnlich sinnvoll wie die @Override-Annotation in Java.


Danke für Deine Antwort. Ich habe mir das mal angesehen und glaube ich auch verstanden. Komisch finde ich nur, dass ich in Android Studio (mittlerweile in der neuesten Version 4.0) einen Fehler bekomme. Habe ich mal als screen shot drangehängt. Der auskomentierte code funktioniert (habe ich aber auch nicht anders erwartet), aber mit eben diesem "it:" gibt es Probleme  



Dies ist die Fehlermeldung:



Aber ich muss auch ganz ehrlich sagen, dass das alles nichts mit meinem Problem beim flip der Spielkarte zu tun haben kann. Denn wenn ich den auskommentierten code verwende, kann ich das Programm laufen lassen. Nur leider funktioniert es dann nicht so, wie es soll. Da muss ich wohl noch ein wenig Energie und Gehirnschmalz drauf verwenden.

Und ich muss noch mehr lernen über funktionale Programmierung und Lambadas - das aber später!
Vielen Dank
Andreas


----------



## dgtKotlin (1. Jun 2020)

Hallo,
nur der Vollständigkeit halber: Das Problem an sich ist gelöst. Es war ein dummer Fehler in der activity_main.xml, wo das ConstraintsLayout die gleiche id hatte wie eine der TextViews. Da dieser Name aber bei "front_anim.setTarget()" verwendet wurde, hat sich immer das gesamte ConstraintLayout auf Knopfdruck gedreht. Ich werde mich da jetzt noch mal genauer drum kümmern, denn ich verstehen noch nicht ganz genau, warum das ein Problem geben soll. Den meiner Meinung nach sind die id's ja auch auf den jeweiligen Typ bezogen und daher sollte es möglich sein, für z.B. einen Button die gleiche id zu vergeben wie für eine TextView. Auf jeden fall funktioniert die App jetzt wie sie soll, nachdem ich eindeutige Namen für die id's vegeben habe.

Noch eine wichtige Anmerkung:
Dies war in dem Sourcecode des Videos auf YouTube von "doctor code" nicht so und dort funktioniert die App daher auch. Es war eindeutig mein Fehler!
Vielen Dank
Andreas


----------

