イベントハンドリングのためのRxBusとは?
今までリスナーでイベントをハンドリングしていたものを、どこからでも、どこでもハンドリングできるようにする方法。
下ごしらえ
RxBusProviderというものを作成しておきます。
http://qiita.com/yyaammaa/items/57d8baa1e80346e67e47
使い方
イベント作成:空で大丈夫です。引数もOK。わかりやすいようにクリックイベントにしてみます。
public class OnClickEvent{
View v;
public OnClickEvent(View v){ this.v = v; }
}
イベント送信:これを書いた場所どこからでも送れるみたいです。
RxBusProvider.getInstance().send(new OnClickEvent(v))
イベント受信:これを書いた場所全部で拾ってしまいます。
RxBusProvider.getInstance().toObservable()
.subscribe(o -> {
if(o instanceof OnClickEvent ){
// ここでハンドリング
v.setText("おされた");
}
})
補足
Fragmentを使いまわすような構造にしていると、全部でハンドリングされてしまいます。全部で拾わないためにはC#風にsenderとthisと比較すればいいのかな...