2016-04-20 10 views
7

Mein onEvent in einem Fragment wie unten, Erfassen der Authentifizierung der Aktivität, in meiner Kotlin-Funktion. Allerdings kann ich das onEvent nicht auslösen.Kotlin: Können wir @Subscribe von EventBus (GreenRobot) in Kotlin verwenden?

@Subscribe 
fun onEvent(event: AuthenticationEvent) { 
    if (event.isAuthenticated) { 
     startFragment(signInFragment, SignInFragment.TAG) 
    } else { 
     startFragment(signOutFragment, SignOutFragment.TAG) 
    } 
} 

In meiner build.gradle Datei habe ich hinzufügen dieses

compile 'org.greenrobot:eventbus:3.0.0' 

Gibt es etwas, was ich tun müssen, um diesen Trigger zu bekommen?

+0

Wie veröffentlichen Sie Ihre Veranstaltung? Haben Sie Ihren registrierten Eventbus in Ihrer Aktivität? Bitte fügen Sie weitere Informationen hinzu. – yennsarah

+0

https://github.com/greenrobot/EventBus/issues/286 –

+0

Ich habe onResume registrieren und onPause aufheben. Derselbe Ereigniseintrag könnte in einer anderen Klasse in Java erfasst werden. – Elye

Antwort

3

Um Annotationsprozessoren mit Kotlin zu verwenden, müssen Sie Kotlin Annotation Processor tool (kapt) verwenden.

Fügen Sie diese auf Ihre build.gradle:

apply plugin: 'kotlin-kapt' 

According to GreenRobot (und durch meinen Tests bestätigt), das alles, was Sie @Subscribe erhalten müssen ist.

+1

Seit dem EventBus 3.1.1 müssen wir das nicht mehr hinzufügen. Wie auch immer, das ist die richtige Problemumgehung. –

0

Sie könnten Squares Otto verwenden, die auf die gleiche Weise funktioniert und perfekt mit Kotlin funktioniert. Seien Sie jedoch vorsichtig, da EventBuses dazu neigen, Android-Code zu verkomplizieren, weshalb sie das Framework zugunsten von Rx veraltet haben.

+0

Dieses Projekt ist zugunsten von RxJava und RxAndroid veraltet. Diese Projekte ermöglichen das gleiche ereignisgesteuerte Programmiermodell wie Otto, sind jedoch leistungsfähiger und bieten eine bessere Steuerung des Threads. Wenn Sie eine Anleitung für die Migration von Otto zu Rx suchen, ist dieser Beitrag ein guter Anfang. https://blog.ka.ush.co/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/ –

2
  1. Stellen Sie sicher, Ihre Event-Handler-Funktion mit @Subscribe Anmerkung ist öffentlichen
  2. In der build.gradle Datei den Code hinzufügen:

    apply plugin: 'kotlin-kapt' 
    
    implementation "org.greenrobot:eventbus:3.0.0" 
    kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1' 
    
  3. Wenn Sie Subscriber Index verwenden möchten, fügen Sie den Code zu build.gradle auch:

    kapt { arguments { arg('eventBusIndex', 'your-package.MyEventBusIndex') } }