处理这种情况的更重要的方法是将RxJava2与Throttling运算符(Throttle First)一起使用。在Kotlin中实现此步骤:
1)。依赖关系:-在build.gradle应用级文件中添加rxjava2依赖关系。
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
2)。构造一个实现View.OnClickListener的抽象类,该类包含节流优先运算符以处理视图的OnClick()方法。代码段为:
import android.util.Log
import android.view.View
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.subjects.PublishSubject
import java.util.concurrent.TimeUnit
abstract class SingleClickListener : View.OnClickListener {
private val publishSubject: PublishSubject<View> = PublishSubject.create()
private val THRESHOLD_MILLIS: Long = 600L
abstract fun onClicked(v: View)
override fun onClick(p0: View?) {
if (p0 != null) {
Log.d("Tag", "Clicked occurred")
publishSubject.onNext(p0)
}
}
init {
publishSubject.throttleFirst(THRESHOLD_MILLIS, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { v -> onClicked(v) }
}
}
3)。在活动视图点击时实现此SingleClickListener类。这可以通过以下方式实现:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val singleClickListener = object : SingleClickListener(){
override fun onClicked(v: View) {
}
}
xm_viewl_id.setOnClickListener(singleClickListener)
}
在应用程序中实施上述步骤可以简单地避免多次单击视图直到600mS。祝您编码愉快!