サーチ…


備考

オットーRxJavaRxAndroid支持して廃止さ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