我想使用Rxkotlin自动完成搜索,等待3秒,然后在数组列表中搜索这个字符并更新recyclerview。
我在viewModel中使用DataBinding完成所有这些工作,我尝试使用以下代码:
fun onSearchChange(s: CharSequence, start: Int, before: Int, count: Int) {
val observable = Observable.create<String> { subsciber ->
try {
subsciber.onNext(s.toString())
} catch (e: Exception) {
Log.e("tag", "err: ")
subsciber.onError(e)
}
}.debounce(3, TimeUnit.SECONDS)
.subscribe { Log.e("tag", "down: $it") }
compositeDisposable.add(observable)
}
但是每次我尝试键入任何字符时,它都会这样做:
H他冥界地狱你好** 3秒后**
但是3秒后我想要的只是你好。你能帮帮我吗?
我认为问题是因为你的函数每次创建新的可观察对象时fun onSearchChange()
函数调用。试着像这样分隔你的可观察对象
val emittedText = PublishSubject.create<String>()
fun onSearchChange(s: CharSequence, start: Int, before: Int, count: Int) {
emittedText.onNext(s.toString())
}
fun observeTextChangeEvents() {
val disposable = emittedText
.debounce(3, TimeUnit.SECONDS)
.subscribe { Log.e("tag", "down: $it") }
compositeDisposable.add(disposable)
}