美文网首页Android开发Android开发经验谈Android技术知识
Rxjava操作符飙车系列(二)防止按钮重复点击

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

作者: 一汪藏海 | 来源:发表于2017-06-15 15:41 被阅读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 );
            }
        }) ;

    相关文章

      网友评论

        本文标题:Rxjava操作符飙车系列(二)防止按钮重复点击

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