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参数是一个列表(参考上面的示意图),这就是,通过判断列表的大小即可知道点击次数。
网友评论