Io uso il seguente codice per eseguire la ricerca quando utente digita in un EditText:Come evitare più trigger su EditText mentre l'utente sta digitando?
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) {
}
});
Tuttavia, questo innesca più volte quando l'utente sta scrivendo una parola. Cioè se l'utente sta scrivendo "ciao", questo codice si innesca 5 volte con valori ("h", "he", "hel", "hell", "hello"). Normalmente, ciò andrebbe bene, ma la ricerca attivata è costosa e non voglio sprecare risorse per ricerche intermedie che non sono di grande utilità. Quello che voglio è un ascoltatore che attiva solo una certa soglia dopo che l'utente inizia a digitare, o un qualche tipo di framework, che aspetta nell'ascoltatore prima di chiamare triggerSearch
e se un altro evento viene attivato prima di quell'attesa, annulla sé stesso.
Questa classe del gestore deve essere statica o potrebbero verificarsi perdite. – Choletski
@Choletski si prega di elaborare come potrebbero verificarsi perdite e rendere statico lo impedirà? – jitenagarwal19
@ jitenagarwal19 un gestore statico non manterrebbe un riferimento alla classe di chiusura – andrei