【问题标题】:Rxkotlin Auto complete searchRxkotlin 自动完成搜索
【发布时间】:2021-12-03 23:48:56
【问题描述】:

我想使用带有自动完成搜索功能的 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 他 HEL 地狱 你好 ** 3 秒后 **

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

【问题讨论】:

    标签: android kotlin search autocomplete system.reactive


    【解决方案1】:

    我认为问题是因为您的函数每次在调用 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)
    }
    

    【讨论】:

    • 什么时候调用 observeTextChangeEvents ?
    • 如果它在您的 viewModel 中,那么在 init{ } 块中
    • 我试过了,但是不行
    猜你喜欢
    • 1970-01-01
    • 2014-06-15
    • 2015-07-20
    • 1970-01-01
    • 2012-07-01
    • 2012-03-20
    • 2013-10-27
    • 2012-11-12
    相关资源
    最近更新 更多