仅在用户停止输入后如何发出网络请求

时间:2020-05-28 18:58:44

标签: kotlin

我知道这个问题已经问了很多遍了,但是我找不到任何可行的解决方案。

我正在实现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)之前,我该如何等待找出用户是否不再输入。

1 个答案:

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