I\'m new in reactive programming. So I have problem when create a stream from an Event, like onClick, ontouch...
Can anyone help me solve this problem.
Thank
You would do something like this:
Observable clickEventObservable = Observable.create(new Observable.OnSubscribe() {
@Override
public void call(final Subscriber super View> subscriber) {
viewIWantToMonitorForClickEvents.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (subscriber.isUnsubscribed()) return;
subscriber.onNext(v);
}
});
}
});
// You can then apply all sorts of operation here
Subscription subscription = clickEventObservable.flatMap(/* */);
// Unsubscribe when you're done with it
subscription.unsubscribe();
Since you're using Android then you may already include the contrib rxjava-android
dependency now known as ioreactivex:rxandroid
.
They already have a class to facilitate this. The method is ViewObservable.clicks
. You can use it like so.
Observable buttonObservable = ViewObservable.clicks(initiateButton, false);
buttonObservable.subscribe(new Action1() {
@Override
public void call(View button) {
// do what you need here
}
});
Edit: Since version 1.x, ViewObservable and many helper classes are removed from RxAndroid. You will need RxBinding library instead.
Observable buttonObservable = RxView.clicks(initiateButton);
buttonObservable.subscribe(new Action1() {
@Override
public void call(Void x) {
// do what you need here
}
});