android - Rxkotlin 自动完成搜索
问题描述
我想将 Rxkotlin 与自动完成搜索一起使用,等待 3 秒,然后在 arraylist 中搜索此字符并更新 recyclerview 。
我使用 DataBinding 在 viewModel 中完成所有这些工作我尝试使用以下代码:
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 秒后变成只是你好。你能帮我么?
解决方案
我认为问题是因为您的函数每次在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)
}
推荐阅读
- java - 如何停止所有 VBS 文字转语音?
- swift - TableViewCell 元素中的 UIMenuController
- android - 在 android studio 中编译失败
- linux - Unix 用户级别如何影响我对 docker 映像的可见性?
- android - 计算到特定时区午夜的秒数
- javascript - 在 try/catch 块中成功异步请求后执行语句
- c++ - 交错插入排序功能无法正确排序
- android - Expo with Android Studio Emulator 错误:“Error running adb: This computer is not authorized to debug the device”
- php - 文件夹中的 HTML 图像不再出现 (PHP)
- python - 如果日期是周末 - 自动重新运行该功能