Android SearchSuggestSelection habilita la consulta comienza con en lugar de contiene la búsqueda

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

  •  11-12-2019
  •  | 
  •  

Pregunta

estoy usando el android BuscarSugerenciasRecientesProveedor y Configuración con capacidad de búsqueda para mostrar búsquedas anteriores en la aplicación y le gustaría limitar las respuestas sugeridas para devolver solo entradas que comiencen con ?(lo que el usuario está escribiendo)

actualmente "p" devuelve teléfono, ipod, foto, feliz, y lo que busco es solo teléfono y foto

Algo equivalente a SQL como % pero parece que no puedo hacer que funcione.

<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>

Intentó:

android:searchSuggestSelection="WORD LIKE '%'?"
¿Fue útil?

Solución

Si estuviera implementando un proveedor de sugerencias totalmente personalizado, aplicar personalizaciones en este nivel funcionaría como se esperaba.Sin embargo, en secreto, SearchRecentSuggestionsProvider consulta su tabla local con los siguientes argumentos codificados (echar un vistazo):

  • selección = "mostrar1 ¿ME GUSTA?"
  • selecciónArgs = ["%{query}%"]

donde {consulta} es la consulta de búsqueda (está intercalada entre signos de dos por ciento para que cualquier carácter que coincida en cualquier parte de la cadena cuente).Ignora el valor pasado para la cadena de selección (que es lo que está configurando con el searchSuggestSelection parámetro) y la matriz args (más allá de verificar si está vacía), por lo que realmente no hay mucho que puedas hacer desde XML.

Debido a que la implementación ignora los parámetros entrantes, no existe una solución o anulación fácil.Para ahorrarse la codificación duplicada, yo haría lo siguiente:

  1. Copie la implementación completa de SearchRecentSuggestionsProvider desde el enlace de arriba.Nada de lo que haga la clase debe ser privado en el marco, por lo que se debe compilar una copia directa.
  2. Modifique la declaración de construcción de la matriz args, dentro del query() método, ser String like = selectionArgs[0] + "%" en lugar de String like = "%" + selectionArgs[0] + "%" (es decir.eliminar el primer porcentaje)
  3. Subclase ProductSearchSuggestionProvider de su nueva implementación en su lugar.

Otros consejos

¿Has probado una concatenación de cadena?

word LIKE ? || '%'

|| es una concatenación de cadena en SQLite.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top