Android SearchSuggestSelection active la requête commence par au lieu de contient la recherche

StackOverflow https://stackoverflow.com//questions/11649194

  •  11-12-2019
  •  | 
  •  

Question

J'utilise Android Rechercher un fournisseur de suggestions récentes et Configuration consultable pour afficher les recherches précédentes dans l'application et souhaite limiter les réponses suggérées aux seules entrées commençant par ?(ce que l'utilisateur tape)

actuellement, "p" renvoie téléphone, iPod, photo, heureux, et ce que je recherche, c'est juste un téléphone et une photo

Quelque chose d'équivalent à SQL comme % mais je n'arrive pas à faire fonctionner ça.

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:hint="@string/product_search_hint"
    android:imeOptions="actionSearch"
    android:label="@string/app_label"
    android:searchSuggestAuthority="com.myapp.ProductSearchSuggestionProvider"
    android:searchSuggestSelection="word MATCH ?" >
</searchable>

Essayé:

android:searchSuggestSelection="WORD LIKE '%'?"
Était-ce utile?

La solution

Si vous implémentiez un fournisseur de suggestions entièrement personnalisé, l’application des personnalisations à ce niveau fonctionnerait comme prévu.Cependant, sous les couvertures, SearchRecentSuggestionsProvider interroge sa table locale avec les arguments codés en dur suivants (regarde):

  • sélection = "affichage1 COMME ?"
  • sélectionArgs = ["%{query}%"]

où {query} est la requête de recherche (elle est prise en sandwich entre deux signes pour cent afin que tout caractère correspondant n'importe où dans la chaîne compte).Il ignore la valeur transmise pour la chaîne de sélection (qui est celle que vous définissez avec le searchSuggestSelection paramètre) et le tableau args (au-delà de vérifier s'il est vide), vous ne pouvez donc pas vraiment faire grand-chose à partir de XML.

Étant donné que l’implémentation ignore les paramètres entrants, il n’existe pas de solution ou de remplacement facile.Pour vous éviter un codage en double, je voudrais :

  1. Copiez l'intégralité de l'implémentation de SearchRecentSuggestionsProvider à partir du lien ci-dessus.Rien de ce que fait la classe ne doit être privé du framework, donc une copie directe doit être compilée.
  2. Modifiez l'instruction de construction à partir du tableau args, à l'intérieur du query() méthode, être String like = selectionArgs[0] + "%" au lieu de String like = "%" + selectionArgs[0] + "%" (c'est à dire.supprimer le premier pour cent)
  3. Sous-classe ProductSearchSuggestionProvider à partir de votre nouvelle implémentation à la place.

Autres conseils

Avez-vous essayé la concaténation de chaînes ?

word LIKE ? || '%'

|| est la concaténation de chaînes dans SQLite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top