Como evitar vários gatilhos no EditText enquanto o usuário está digitando?
Eu uso o seguinte código para executar a pesquisa quando o usuário digita em um 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) {
}
});
No entanto, isso dispara várias vezes quando o usuário está digitando uma palavra. Ou seja, se o usuário estiver digitando "olá", esse código irá disparar 5 vezes com valores ("h", "he", "hel", "hell", "hello"). Normalmente, isso seria ótimo, mas a pesquisa acionada é cara e não quero desperdiçar recursos em pesquisas intermediárias que não são de grande utilidade. O que eu quero é um ouvinte que acione apenas um certo limite depois que o usuário começar a digitar, ou algum tipo de estrutura, que espere no ouvinte antes de chamartriggerSearch
, e se outro evento for acionado antes dessa espera, cancela a si mesmo.