Я использую следующий код для выполнения поиска, когда пользователь вводит EditText:
EditText queryView = (EditText) findViewById(R.id.querybox);
queryView.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
triggerSearch(s.toString());
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});
Однако это срабатывает несколько раз, когда пользователь вводит слово. То есть, если пользователь набирает «привет», этот код сработает 5 раз со значениями («h», «he», «hel», «hell», «hello»). Обычно это было бы хорошо, но триггерный поиск стоит дорого, и я не хочу тратить ресурсы на промежуточные поиски, которые бесполезны. Я хочу либо прослушиватель, который запускает только определенный порог после того, как пользователь начинает печатать, либо какой-то фреймворк, который ожидает в прослушивателе перед вызовом triggerSearch
, и если другое событие запускается до этого ожидания, отменяет себя.