RxJava实例-按钮点击数累加

来源:互联网 发布:html编程 编辑:程序博客网 时间:2024/06/05 16:10

RxJava实例

RxJava实例-线程切换

效果图


点击累加.gif

说明

在一定时间内(3s),对点击按钮的次数进行累计,每点击一下,输出一条log,当时间到时(3s),会输出这段时间内点击的次数

buffer操作符

实现这种效果的办法当然有很多种,这里用RxJava的buffer操作符来简单写一个demo。


image.png


这张图简单明了,不用多说。

实现方式

之前参考的代码用的是RxBinding实现的,逻辑非常清晰,这里就不用RxBinding了。
既然要点击,那么应该要在每次点击的时候,输出一条log到屏幕,并且在时间到的时候,输出这段时间点击的总次数。

主要代码

private void countTaps() {        Observable                .create(new Observable.OnSubscribe<Boolean>() {                    @Override                    public void call(final Subscriber<? super Boolean> subscriber) {                        mBtnStartBufferTaps.setOnClickListener(new View.OnClickListener() {                            @Override                            public void onClick(View v) {                                log("点击了按钮");                                mTvTapsCounter.setText(String.valueOf((++counter)));                                subscriber.onNext(true);                            }                        });                    }                })                .buffer(3, TimeUnit.SECONDS)                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber<List<Boolean>>() {                    @Override                    public void onCompleted() {                        log("subscriber -> onCompleted");                    }                    @Override                    public void onError(Throwable e) {                        log("subscriber -> onError:" + e.getMessage());                    }                    @Override                    public void onNext(List<Boolean> list) {                        if (list.size() != 0){                            log("点击了" + list.size() + "次");                            mTvTapsCounter.setText("0");                            counter = 0;                        }                    }                });    }

关键就在监听器里面的subscriber.onNext()方法,每次点击,通过这个方法通知subscriber,然后就是buffer操作符,将结果缓存3s,发射出来,可以看到onNext参数是一个列表(参考上面的示意图),这就是,通过判断列表的大小即可知道点击次数。

源代码

Demo地址:https://github.com/jiangkang/KTools.git

原创粉丝点击