Android开发Android开发经验谈Android技术知识

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

2017-06-15  本文已影响0人  一汪藏海

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 );
        }
    }) ;
上一篇下一篇

猜你喜欢

热点阅读