Rxjava操作符飙车系列(二)防止按钮重复点击

button按钮防抖操作,防连续点击
百度关键词联想,在一段时间内只联想一次,防止频繁请求服务器

如果不用Rxjava,我们也可以很方便的实现,例如

 private long lastTime=0;
@OnClick(R.id.button)
public void onViewClicked() {

    //常规方式
    long currTime=System.currentTimeMillis();
    if (lastTime-currTime>500){
        //进行相关的操作
    }
    lastTime=currTime;

}

那么用Rxjava如何实现呢,这里我们用到一个操作符

ThrottleFirst:

ThrottleFirst

可以看到在图的末尾最后一段,ThrottleFirst 和Sample是类似的,Sample是在周期内进行发射,ThrottleFirst 设置一个时间长度,之后它会发送固定时间长度内的第一个事件,而屏蔽其他事件在间隔达到设置的时间后,可以在发送下一个事件。

狗子上代码

给大家推荐一下大神写的RxBinding,现在已经和RXjava2完美结合咯,略略略

 RxView.clicks(button)
         //   .sample(1,TimeUnit.SECONDS)
            .throttleFirst(3, TimeUnit.SECONDS)//在一秒内只取第一次点击
            .subscribe(new Consumer<Object>() {
                @Override
                public void accept(Object o) throws Exception {
                    Toast.makeText(ButtonActivity.this,"狗子",Toast.LENGTH_SHORT).show();
                }
            });

科普一个Rxbing的小栗子:
例如,用户登录界面,勾选同意隐私协议,登录按钮就变高亮哦

RxCompoundButton.checkedChanges( checkBox )
.subscribe(new Action1<Boolean>() {
    @Override
    public void call(Boolean aBoolean) {
        button.setEnabled( aBoolean );
        button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );
        }
    }) ;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,233评论 25 709
  • 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的...
    Jason_andy阅读 10,915评论 7 62
  • 前言 我从去年开始使用 RxJava ,到现在一年多了。今年加入了 Flipboard 后,看到 Flipboar...
    AWeiLoveAndroid阅读 7,891评论 4 42
  • 上一篇:015-CFBridgingRelease简析 一、说白了 所谓策略模式(Strategy),说白了就是:...
    AncientMing阅读 4,170评论 0 1
  • 晨起梳妆抿发鬓, 对镜描眉染眼睛。 唇若涂朱无须改, 檀郎拥抱不心惊。
    Mr_稻香老农阅读 2,981评论 18 8