このシナリオを処理するためのより重要な方法は、RxJava2でスロットル演算子(スロットルファースト)を使用することです。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までビューを何度もクリックすることを簡単に回避できます。ハッピーコーディング!