Rxkotlin自动完成搜索



我想使用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)
}

相关内容

  • 没有找到相关文章

最新更新