How to create an Observable from OnClick Event Android?

后端 未结 5 1240
忘掉有多难
忘掉有多难 2020-12-07 17:10

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

5条回答
  •  北海茫月
    2020-12-07 17:27

    You would do something like this:

    Observable clickEventObservable = Observable.create(new Observable.OnSubscribe() {
        @Override
        public void call(final Subscriber 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
            }
        });
    

提交回复
热议问题