Kotlin: Can we use @Subscribe of EventBus (GreenRo

2019-04-23 14:16发布

My onEvent in a fragment as below, capturing the authentication of the activity, in my Kotlin function. However, I can't get that onEvent triggered.

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

In my build.gradle file, I have add this

compile 'org.greenrobot:eventbus:3.0.0'

Is there anything I need to do to get this trigger?

3条回答
混吃等死
2楼-- · 2019-04-23 14:48

To use annotation processors with Kotlin, you need to use the Kotlin Annotation Processor tool (kapt).

Add this to your build.gradle:

apply plugin: 'kotlin-kapt'

According to GreenRobot (and confirmed by my testing), this is all you need to get @Subscribe.

查看更多
趁早两清
3楼-- · 2019-04-23 14:52

You could use Square's Otto, which works the same way and works perfectly with Kotlin. Although, be careful as EventBuses are prone to overcomplicate Android code, and that's why they've deprecated the framework in favor of Rx.

查看更多
虎瘦雄心在
4楼-- · 2019-04-23 14:57
  1. Make sure your event handler function with @Subscribe annotation is public
  2. In the build.gradle file add the code:

    apply plugin: 'kotlin-kapt'
    
    implementation "org.greenrobot:eventbus:3.0.0"
    kapt 'org.greenrobot:eventbus-annotation-processor:3.0.1'
    
  3. If you want to use Subscriber Index, you add the code to build.gradle too:

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

查看更多
登录 后发表回答