Rx_java(7)Rx_java2操作符(throttleFirst、debounce )介绍-防止按钮被重复点击案例
2018-01-08 11:32
1211 查看
相关文章
观察者模式实例讲解使用java中的类(Observable与Observer)实现观察者模式
Rx_java2的基本使用
Rx_java2中的线程控制
Rx_java2操作符介绍1(Map、Flatmap)
Rx_java2操作符介绍2(debounce 、filter 、switchMap )
Retrofit结合RxJava2使用
写在前面
本篇将通过一个实例-防止按钮被重复点击,来讲解Rxjava的一个操作符throttleFirst。本案列还将使用Rxbinding2来完成。
传统的防止按钮被重复点击的方法
一般来说,我们定义一个变量,保存按钮上次被点击的时间,当按钮被点击时,先获取系统时间,再与上次点击的时间作比较,如果符合再次被点击的条件,则继续private long currentTim = 0; public void click(View view){ long systemTime = SystemClock.currentThreadTimeMillis(); if(systemTime - currentTim > 500){ // 与上次点击时间超过500毫秒,则按钮可以点击 // TODO 作按钮点击后的操作 } else { // 与上次点击的时间少于500毫秒,则按钮不能被点击 } currentTim = systemTime; }
Rxjava2方式完成防止按钮被重复点击的操作
我们通过Rxbinding2来绑定空间完成此功能,需要依赖Rxbinding2包compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
因为Rxbinding2中已经依赖了Rxjava2,所以在我们的build.gradle中不需要再次去依赖Rxjava2的包
首先,我们在布局文件中创建一个按钮
然后通过Rxbinding绑定这个控件。注册起点击事件
RxView.clicks(mButton)
当按钮被点击时,我们需要判断是否与上次点击点击的时间间隔,然后再去响应按钮的点击事件。
所以我们用到了throttleFirst操作符。
throttleFirst操作符
允许设置一个时间长度,之后它会发送固定时间长度内的第一个事件,而屏蔽其它事件,在间隔达到设置的时间后,可以再发送下一个事件。下面我们在代码中展示throttleFirst的具体用法
mButton = (Button) findViewById(R.id.button); // 创建观察者 Observer observer = new Observer() { @Override public void onSubscribe(Disposable d) { } @Override public void onNext(Object value) { Log.d("ClickActivity","点击了按钮"); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } }; // 绑定按钮的点击事件,并绑定观察者与被观察者 RxView.clicks(mButton).throttleFirst(1, TimeUnit.SECONDS) .subscribe(observer);
上面的代码中我们用throttleFirst来使得按钮每间隔1秒才会再次响应其点击事件
// 设置间隔1秒才能发送下一个事件 throttleFirst(1, TimeUnit.SECONDS)
结果演示
从上面的gif图片可以看出,当我快速的点击按钮,但是,起响应事件是间隔1秒才做出响应,当我停止点击按钮,也立即停止了响应。
提示
我们上一节学过了的debounce操作符,可以回头看看debounce,在这里完全就可以用debounce来替代throttleFirst。
写在后面
本篇通过一个项目中常用的防止按钮重复点击功能来介绍了一个新的操作符throttleFirst、而且还使用了Rxbinding2,关于Rxbinding2,将会令写一篇文章介绍。相关文章推荐
- Rx_java(6)Rx_java2操作符(debounce 、filter 、switchMap )介绍-搜索功能小案例
- Rx_java(5)Rx_java2操作符(Map、Flatmap)介绍-登录并获取用户信息小案例
- RxAndroid防止按钮短时间内被重复点击多次
- RxAndroid 防止按钮短时间内被重复点击多次,进行限制
- Android防止按钮重复点击示例代码
- listView数据过多,或点击过于频繁崩溃问题解决(防止按钮重复点击)
- 另类办法,实现点击按钮后禁用,直到操作完成后恢复,防止重复操作,实用
- 防止按钮的重复点击导致的请求的重复响应
- android 按钮防止连续点击防止按钮重复点击
- 注册或者点击按钮时,怎么防止用户重复提交数据(实例讲解)
- Android 快速实现防止网络重复请求&按钮重复点击的方法
- Swift防止按钮重复点击实现+Swift如何运用Runtime
- Android 防止按钮控件被重复点击.
- ASP.NET怎么防止多次点击提交按钮重复提交
- 【Android】Android防止过快点击造成多次事件执行(防止按钮重复点击)
- jQuery遮盖蒙板(防止重复点击按钮误操作)
- 防止按钮重复点击
- 防止重复点击按钮方案总结
- 防止按钮重复点击的思路(js篇)
- iOS 防止UIButton按钮重复点击