前言:本文是基于Rxjava实现防止按钮重复点击
实现:
1、添加依赖
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
2、封装工具类
object ViewUtil {fun onClick(view: View, duration: Long, onNext: Consumer<in View>): Disposable {return ViewObservable(view).throttleFirst(duration, TimeUnit.MILLISECONDS).subscribe(onNext)}private class ViewObservable(view: View) : Observable<View>() {val mView = viewoverride fun subscribeActual(observer: Observer<in View>?) {if (observer != null) {Listener(mView, observer).let {observer.onSubscribe(it)mView.setOnClickListener(it)}}}}private class Listener(view: View, observer: Observer<in View>) : MainThreadDisposable(),View.OnClickListener {val mView = viewval mObserver = observeroverride fun onDispose() {mView.setOnClickListener(null)}override fun onClick(v: View?) {if (!isDisposed && v != null) {mObserver.onNext(v)}}}
}
3、具体使用
class MainActivity : AppCompatActivity() {private val mCompositeDisposable = CompositeDisposable()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val disposableOne = ViewUtil.onClick(buttonOne, 500, Consumer {Log.e("aa", "**buttonOne:" + System.currentTimeMillis())})val disposableTwo = ViewUtil.onClick(buttonTwo, 500, Consumer {Log.e("aa", "**buttonTwo:" + System.currentTimeMillis())})mCompositeDisposable.add(disposableOne)mCompositeDisposable.add(disposableTwo)}override fun onDestroy() {super.onDestroy()mCompositeDisposable.clear()}
}
注:这里通过CompositeDisposable在页面onDestroy时取消订阅。