我知道这个问题已经问了很多遍了,但是我找不到任何可行的解决方案。
我正在实现TextWatcher
,并且我想发出网络请求,但是仅当用户完成键入时。
这是我的代码。
val StartFragment.textWatcher: TextWatcher
get() = object : TextWatcher {
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
searchPlaces(s)
}
override fun afterTextChanged(s: Editable?) {}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
}
在执行searchPlaces(s)
之前,我该如何等待找出用户是否不再输入。
答案 0 :(得分:0)
多亏了user2340612的评论,我才能通过在Timer
中设置ViewModel
来解决问题。
// In the ViewModel
private var timer = Timer()
private val delay: Long = 500L
fun searchPlaces(placeName: String) {
searchWord.value = placeName
timer.cancel()
timer = Timer()
timer.schedule(object: TimerTask() {
override fun run() {
viewModelScope.launch {
repository.searchPlaces(placeName)
}
}
}, delay)
}