RxJava实例-按钮点击数累加

RxJava实例

RxJava实例-线程切换

效果图

点击累加.gif

说明

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

buffer操作符

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

RxJava实例-按钮点击数累加_第1张图片
image.png

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

实现方式

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

主要代码

private void countTaps() {
        Observable
                .create(new Observable.OnSubscribe() {
                    @Override
                    public void call(final Subscriber 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>() {
                    @Override
                    public void onCompleted() {

                        log("subscriber -> onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                        log("subscriber -> onError:" + e.getMessage());
                    }

                    @Override
                    public void onNext(List 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

你可能感兴趣的:(RxJava实例-按钮点击数累加)