2016-04-20 18 views
7

Il mio onEvent in un frammento come sotto, catturando l'autenticazione dell'attività, nella mia funzione di Kotlin. Tuttavia, non riesco a ottenere che onEvent sia attivato.Kotlin: possiamo usare @Subscribe di EventBus (GreenRobot) in Kotlin?

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

Nel mio file build.gradle, ho aggiungere questo

compile 'org.greenrobot:eventbus:3.0.0' 

c'è qualcosa che devo fare per ottenere questo grilletto?

+0

Come pubblichi il tuo evento? Hai il tuo eventbus registrato nella tua attività? Si prega di aggiungere ulteriori informazioni. – yennsarah

+0

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

+0

Sono registrato su Riduci e annullo la registrazione su Post. Lo stesso post di evento potrebbe essere catturato su un'altra classe in Java. – Elye

risposta

3

Per utilizzare i processori di annotazione con Kotlin, è necessario utilizzare Kotlin Annotation Processor tool (kapt).

Aggiungi questo al vostro build.gradle:

apply plugin: 'kotlin-kapt' 

According to GreenRobot (e confermato dal mio test), questo è tutto ciò che serve per ottenere @Subscribe.

+1

Dal momento che l'EventBus 3.1.1, non abbiamo bisogno di aggiungere questo più. Ad ogni modo, questa è la soluzione corretta. –

0

È possibile utilizzare lo Otto di Square, che funziona allo stesso modo e funziona perfettamente con Kotlin. Anche se, fai attenzione poiché EventBuse è incline a complicare eccessivamente il codice Android, ed è per questo che hanno deprecato il framework in favore di Rx.

+0

Questo progetto è obsoleto a favore di RxJava e RxAndroid. Questi progetti consentono lo stesso modello di programmazione event-driven di Otto, ma sono più capaci e offrono un migliore controllo del threading. Se stai cercando indicazioni sulla migrazione da Otto a Rx, questo post è un buon inizio. https://blog.kaush.co/2014/12/24/implementing-an-event-bus-with-rxjava-rxbus/ –

2
  1. Assicurarsi che la funzione del gestore di eventi con @Subscribe annotazione è pubblico
  2. Nel file build.gradle aggiungere il codice:

    apply plugin: 'kotlin-kapt' 
    
    implementation "org.greenrobot:eventbus:3.0.0" 
    kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1' 
    
  3. Se si desidera utilizzare Subscriber Index, si aggiunge il codice a build.gradle anche:

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