当前位置: 代码迷 >> 综合 >> 点击防抖动
  详细解决方案

点击防抖动

热度:51   发布时间:2024-02-24 04:27:07.0

前言:本文是基于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时取消订阅。

  相关解决方案