2016-06-14 9 views
10

w Javie, instancję obiekt interfejs jest tak proste, jak new Interface() ... i zastąpić wszystkie wymagane funkcje, jak poniżej, na AnimationListenerJak instancję anonimową klasy, która implementuje interfejs w 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 
    }); 
} 

jednak w języku Kotlin, gdy wpisujemy:

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

Nie można rozpoznać reklamacji dotyczących błędów Referencje AnimationListener.

+1

Możliwy duplikat [Jak utworzyć instancję anonimowego interfejsu w Kotlin?] (Http://stackoverflow.com/questions/37672023/how-to-create-an-instance-of-anonymous-interface -in-kotlin) – miensol

Odpowiedz

19

Jak wyjaśniono w the documentation:

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

Dzięki! Wspaniały. Kiedy szukam w https://kotlinlang.org/docs/reference/interfaces.html, nie dotknęło to nawet niczego. Dokumentacja jest dość zasłonięta. Wyszukiwanie w Internecie również nie może go znaleźć. Jedynym miejscem, w którym można to znaleźć, jest ręczne napisanie kodu Java i przekonwertowanie go ... Mam nadzieję, że moje pytanie stackoverflow pomoże innym szukającym tego szybko, aby go znaleźć. Dzięki! – Elye

+0

Zasugerowałem, aby poprawić dokumentację w luku kotlin. Zgadzam się, że informacje nie są tak łatwe do znalezienia w dokumencie. –

+0

Brzmi świetnie! – Elye

4

pozornie ostatnią drogę (przy Kotlin 1.0.5) robi to teraz bez nawiasów, biorąc pod uwagę nie ma pusty konstruktor dla interfejsu.

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