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 和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 );
}
}) ;