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:

Rxjava操作符防止按钮重复点击 监听长按_第1张图片
image

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

狗子上代码

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

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

 
 

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

RxCompoundButton.checkedChanges( checkBox )
.subscribe(new Action1() {
    @Override
    public void call(Boolean aBoolean) {
        button.setEnabled( aBoolean );
        button.setBackgroundResource( aBoolean ? R.color.button_yes : R.color.button_no );
        }
    }) ;

//监听长按时间

 RxView.longClicks( button)
      .subscribe(new Action1() {
          @Override
         public void call(Void aVoid) {
         Toast.makeText(MainActivity.this, "long click  !!", Toast.LENGTH_SHORT).show();
         }
     }) ;

你可能感兴趣的:(Rxjava操作符防止按钮重复点击 监听长按)