Ich verwende den folgenden Code-Suche durchzuführen, wenn Benutzer in einem EditText:Wie vermeidet man mehrere Trigger auf EditText, während der Benutzer tippt?
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) {
}
});
Dies ist jedoch mehrfach ausgelöst, wenn der Benutzer ein Wort ist die Eingabe. Das heißt, wenn der Benutzer "Hallo" tippt, wird dieser Code 5 Mal mit Werten ausgelöst ("h", "he", "hel", "hell", "hallo"). Normalerweise wäre das in Ordnung, aber die ausgelöste Suche ist teuer und ich möchte keine Ressourcen für Zwischensuchen verschwenden, die keinen großen Nutzen haben. Was ich will, ist entweder ein Listener, der nur einen gewissen Schwellenwert auslöst, nachdem der Benutzer anfängt zu tippen, oder eine Art Framework, das im Listener wartet, bevor er triggerSearch
aufruft, und wenn vor dieser Wartezeit ein anderes Ereignis ausgelöst wird, bricht es sich ab.
Diese Handler-Klasse sollte statisch sein oder Lecks auftreten. – Choletski
@Choletski bitte erläutern, wie Lecks auftreten können und statische Aufladung wird dies verhindern? – jitenagarwal19
@ jitenagarwal19 ein statischer Handler würde keinen Verweis auf die umschließende Klasse behalten – andrei