2016-06-14 17 views
10

In Java implementiert, instanziiert ein Interface-Objekt als new Interface() so einfach ist ... und außer Kraft setzen alle erforderlichen Funktionen, wie unten, auf AnimationListenerWie eine anonyme Klasse instanziiert, die eine Schnittstelle in Kotlin

private void doingSomething(Context context) { 
    Animation animation = AnimationUtils.loadAnimation(context, android.R.anim.fade_in); 
    animation.setAnimationListener(new Animation.AnimationListener() { 
     // All the other override functions 
    }); 
} 

jedoch in Kotlin, wenn wir schreiben

private fun doingSomething(context: Context) { 
    val animation = AnimationUtils.loadAnimation(context, android.R.anim.fade_in) 
    animation.setAnimationListener(Animation.AnimationListener(){ 
     // All the other override functions 
    }) 
} 

Es Fehler Beschwerden ungelöst Referenzen AnimationListener.

+1

Mögliches Duplikat von [Wie eine Instanz der anonymen Schnittstelle in Kotlin erstellen?] (Http://stackoverflow.com/questions/37672023/how-to-create-an-instance-of-anonymous-interface -in-kotlin) – miensol

Antwort

19

Wie in the documentation:

animation.setAnimationListener(object : Animation.AnimationListener { 
    // All the other override functions 
}) 
+0

Danke! Groß. Wenn ich in https://kotlinlang.org/docs/reference/interfaces.html suche, hat es nichts davon berührt. Die Dokumentation ist ziemlich verdeckt. Suche im Internet kann auch nicht gefunden werden. Der einzige Ort, an dem Sie dies finden können, besteht darin, einen Java-Code manuell zu schreiben und ihn zu konvertieren. Hoffentlich hilft meine stackoverflow-Frage anderen, die schnell danach suchen. Vielen Dank! – Elye

+0

Ich schlug vor, die Dokumentation im Kotlin-Slack zu verbessern. Ich stimme zu, dass die Informationen im Dokument nicht so leicht zu finden sind. –

+0

Das klingt großartig! – Elye

4

offenbar die neueste Art und Weise (mit Kotlin 1.0.5), es zu tun ist jetzt ohne die Klammer, da es für die Schnittstelle kein leerer Konstruktor ist.

animation.setAnimationListener(object : Animation.AnimationListener { 
    // All the other override functions 
}) 
Verwandte Themen