首页 > 解决方案 > Rxkotlin 自动完成搜索

问题描述

我想将 Rxkotlin 与自动完成搜索一起使用,等待 3 秒,然后在 arraylist 中搜索此字符并更新 recyclerview 。

我使用 DataBinding 在 vi​​ewModel 中完成所有这些工作我尝试使用以下代码:

  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 HE HEL HELL HELLO ** 3 秒后 **

但是我想要的 3 秒后变成只是你好。你能帮我么?

标签: androidkotlinsearchautocompletesystem.reactive

解决方案


我认为问题是因为您的函数每次在fun onSearchChange()调用函数时都会创建新的 observable。尝试像这样分离您的可观察对象

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)
}

推荐阅读