2016-04-12 12 views
3

私はこのtutorialを利用してRxJavaで最初のステップをやっています。私はObservableとは何ですか、と理解していますSubscriberです。しかし、私はそれらの "接続"に問題があります。私はそのようなタスクについて考えました:アクティビティAがアクティビティBを開始します。アクティビティBには、現在の日付を含むDateを作成するためのボタンがあります。もう1つのボタンはDateを発行し、アクティビティBを終了します。アクティビティAは放出されたDate-observableにサブスクライブし、現在の日付を表示します。 (私はこれが正常に活動結果を使用して行われることを知っています)。RxJavaの基礎を理解する

私は、このコードによってアクティビティB内Date -Observableを作成することができます(インスタンスがmDateがタイプDateであり、アクティビティBでどこか別の場所に作成されます):

Observable<Date> dateObservable = 
      Observable.create(sub -> { 
     sub.onNext(mDate); 
     sub.onCompleted(); 
    }); 

しかし、中に私は次の問題を抱えていますアクティビティAIはそれを購読する必要があります。私はApplicationクラスでObservableを静的に作成することを考えましたが、そこにはmDateの値はまだ分かりません。 「call()」メソッド(onNext()onCompleted()が呼び出されています)を実装せずに、特定のタイプのObservableを何らかの形で作成できますか?だから、私は既にAativityで購読可能なObservableインスタンスをすでに持っています。そして、後で "call()" - Activity Bのメソッドを実装できますか?私の記述した目標を達成するために使用できる他のRxJavaの機能は、鉱石ですか?

+0

:https://www.youtube .com/watch?v = QdmkXL7XikQ – EpicPandaForce

答えて

1

ReplaySubjectというものが必要です。カスタムで

MyApplicationクラス:

ReplaySubject<Date> dateSubject = ReplaySubject.create(); 

活動Bでは:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject(); 
subject.onNext(mDate); 
subject.onCompleted(); 

活動Aでは:

ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject(); 
subject.subscribe(...); 
このことは役立つかもしれない
+0

ありがとうございました。しかし、今私はまだ少し不満です。なぜなら私は ''渡すインターフェース ''として '' Application''クラスを使わなければならないので、それを避けたいと思います。 RxJavaを使ってEventBusでイベントを送信することができます。これを達成する方法は? – unlimited101

+0

@ unlimited101ほとんどの実装では、イベントバスは基本的に単純な観測可能です。 'Application'の代わりに静的な変数に入れ、それを囲むラッパーを作ることができます。私が知っている限りでは、アクティビティ間でオブジェクトを共有する方法はありません。 – satorikomeiji

+0

イベントバス(https://github.com/greenrobot/EventBus)では、サービス、アクティビティなどのAndroidコンポーネント間でデータを送信できますが、RxJavaでこれを実現したいと思います。 – unlimited101