Как сделать сетевой запрос только после того, как пользователь перестанет печатать - PullRequest
0 голосов
/ 28 мая 2020

Я знаю, что этот вопрос задавали много раз, но я не могу заставить работать ни одно из решений.

Я реализую 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 голосов
/ 29 мая 2020

Мне удалось решить проблему, установив Timer в ViewModel благодаря комментарию user2340612.

 // 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)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...