Mon activité a SearchView, qui devrait avoir une requête filtrée. Je le filtre via onQueryTextListener. L'idée est que le typage désactiver pas autorisé caractères, comme point, virgule, barre oblique et etc - que [AZ] est autorisé Voici le code (j'utilise Kotlin, mais il est lisible pour Java):SearchView ne pas appeler onQueryTextChange sur le second point
var shouldQueryChangeBeInvoked = true
override fun onCreate(savedInstanceState: Bundle?) {
...
searchField.setOnQueryTextListener(this)
}
override fun setSearchQuery(query: String) {
shouldQueryChangeBeInvoked = false
searchField.setQuery(query, false)
shouldQueryChangeBeInvoked = true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (!shouldQueryChangeBeInvoked) {
return false
}
val validQuery = validateQuery(newText)
validQuery?.let { setSearchQuery(it) }
return false
}
Lorsque Je tape, par exemple, "ABC". il se convertit en "ABC". Donc, ça fonctionne bien. Mais quand je tape dot (".") La deuxième fois, onQueryTextChange ne m'appelle pas du tout - J'ai défini le point d'arrêt sur la première ligne de la méthode. Il a été testé sur deux téléphones différents, il ne s'agit donc pas de paramètres de clavier ou de ce type. Pourquoi l'écouteur n'invoque pas?
EDIT
Validation de la requête que je fait avec Regex comme ça:
fun validateQuery(query: String?): String? {
val regex = Regex("^([A-Z]+)")
// Return first match or null
return query?.let { regex.find(it.toUpperCase()) }?.value
}
ne se soucient pas de la création Regex - Je fournis via DI, donc, il crée une seule fois par activité . Peut-être que cela peut poser problème?
je tape tout et "tout" est passé à 'onQueryTextChange' - y compris des points – pskink
@pskink donc si vous tapez "tout .." il deviendra "whatever"? – DefaultXYZ
oui, ceci est la sortie logcat: 'onQueryTextChange quelquechose ......' – pskink