Android
オットーイベントバス
サーチ…
備考
オットーはRxJava
とRxAndroid
支持して廃止されRxAndroid
。これらのプロジェクトでは、Ottoと同じイベントドリブンプログラミングモデルが使用できますが、より優れた機能を備え、スレッド化の制御機能が向上しています。
イベントに合格する
この例では、 Otto Event Busを使用してイベントを渡す方法について説明します。
Android StudioでOtto Event Busを使用するには、モジュールgradleファイルに次の文を挿入する必要があります。
dependencies {
compile 'com.squareup:otto:1.3.8'
}
私たちが渡したいイベントは単純なJavaオブジェクトです:
public class DatabaseContentChangedEvent {
public String message;
public DatabaseContentChangedEvent(String message) {
this.message = message;
}
}
イベントを送るにはバスが必要です。これは一般的にシングルトンです:
import com.squareup.otto.Bus;
public final class BusProvider {
private static final Bus mBus = new Bus();
public static Bus getInstance() {
return mBus;
}
private BusProvider() {
}
}
イベントを送信するには、BusProviderとpost
メソッドが必要です。ここでは、AsyncTaskのアクションが完了した場合にイベントを送信します。
public abstract class ContentChangingTask extends AsyncTask<Object, Void, Void> {
...
@Override
protected void onPostExecute(Void param) {
BusProvider.getInstance().post(
new DatabaseContentChangedEvent("Content changed")
);
}
}
イベントを受け取る
イベントを受け取るには、イベントタイプをパラメータとしてメソッドを実装し、 @Subscribe
を使用して注釈を付ける@Subscribe
ます。さらに、 BusProvider
オブジェクトのインスタンスを登録/登録解除する必要があります( イベントの送信の例を参照)。
public class MyFragment extends Fragment {
private final static String TAG = "MyFragment";
...
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
@Subscribe
public void onDatabaseContentChanged(DatabaseContentChangedEvent event) {
Log.i(TAG, "onDatabaseContentChanged: "+event.message);
}
}
重要:そのイベントを受け取るには、そのクラスのインスタンスが存在する必要があります。これは通常、あるアクティビティから別のアクティビティに結果を送信する場合には当てはまりません。イベントバスのユースケースを確認してください。
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow