RxJava实例-按钮点击数累加

作者: 姜康 | 来源:发表于2017-05-16 00:02 被阅读302次

    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

    相关文章

      网友评论

        本文标题:RxJava实例-按钮点击数累加

        本文链接:https://www.haomeiwen.com/subject/emekxxtx.html