[Android] EventBusでイベントを通知する

RxJavaでEventBusを置き換える方法について書きましたが、EventBusを使ったイベントの通知についても書いておこうと思います。RxJavaを使ってもEventBusを使っても、さほど変わらないコード量でイベントを購読することができるので、あとは選択があるだけな気がします。

まずはEventBusをプロジェクトに追加します。いつものようにapp/build.gradleへ以下の記述を追加し、Syncすれば完了です。

dependencies {
    // EventBus
    implementation 'org.greenrobot:eventbus:3.1.1'
}

次にイベントを定義します。どのようなクラスでもいいですが、今回はシンプルに以下のようなクラスを定義しました。

class Event(val text: String)

イベントの通知は以下のように行います。EventBus#postにイベントを渡してあげればOKです。これでイベントをPublishすることができました。とても簡単ですね。

EventBus.getDefault().post(event)

次にイベントの購読を行います。こちらは購読と購読解除を行います。また、@Subscribeアノテーションでイベントを受け取るメソッドを指定します(メソッドの名前は何でも良さそうです)。説明するよりコードで示した方が早そうですね。以下、コードです。

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Eventの購読
        EventBus.getDefault().register(this)
    }

    override fun onDestroy() {
        super.onDestroy()

        // Eventの購読解除
        EventBus.getDefault().unregister(this)
    }

    @Subscribe
    fun onEvent(event: Event) {
        textView.text = event.text
    }
}

EventBusのサンプルをGitHubに公開しておきました。イベントの購読/購読解除を行うのにもっと適切な場所があればプルリクをください。