处理这种情况的更重要方法是在 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) {
// operation on click of xm_view_id
}
}
xm_viewl_id.setOnClickListener(singleClickListener)
}
在应用程序中实施上述这些步骤可以简单地避免多次点击视图直到 600 毫秒。快乐编码!